In JavaScript sind alle Ganzzahlvariablen standardmäßig vorzeichenbehaftete Ganzzahlen. Was bedeutet das?
Vorzeichenbehaftete Ganzzahlen verwenden 31 Bit, um den Wert der Ganzzahl darzustellen, und Bit 32, um das Vorzeichen der Ganzzahl darzustellen. 0 repräsentiert eine positive Zahl und 1 repräsentiert eine negative Zahl.
Der Wertebereich reicht von -2^31 bis 2^31-1, also -2147483648 bis 2147483647.
Wenn JavaScript Bitoperationen ausführt, verwendet es einen 32-Bit-Ganzzahltyp mit Vorzeichen, was bedeutet, dass das Ergebnis der Konvertierung ebenfalls ein 32-Bit-Ganzzahltyp mit Vorzeichen ist. Manchmal treten unerwartete Ergebnisse auf, wenn wir eine Verschiebung durchführen. Das Folgende ist ein Vergleich zwischen C-Sprache und JS.
C-Sprache
Kopieren Sie den Codecode wie folgt:
unsigned int a = 3774191835u;
unsigned int b = a >> 2;
/* b == 943547958 */
JavaScript
Kopieren Sie den Codecode wie folgt:
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
Wie Sie sehen, verwendet JavaScript bei der Ausführung von Bitoperationen Ganzzahlen mit Vorzeichen, sodass wir unterschiedliche Ergebnisse erhalten. Wie kann man es lösen?
Wir können vorzeichenbehaftete Zahlen in JavaScript in vorzeichenlose Zahlen umwandeln. Führen Sie einfach den >>>0-Schaltvorgang durch.
Es ist am besten, >> nicht zu verwenden. Es wird empfohlen, >>> zu verwenden, da das Bit ganz links als Vorzeichenbit geparst wird. Wenn die Zahl überläuft, wird sie als negative Zahl geparst.