En JavaScript, toutes les variables entières sont des entiers signés par défaut. Qu'est-ce que cela signifie ?
Les entiers signés utilisent 31 bits pour représenter la valeur de l'entier, et le bit 32 pour représenter le signe de l'entier 0 représente un nombre positif et 1 représente un nombre négatif.
La plage de valeurs va de -2^31 à 2^31-1, soit -2147483648 à 2147483647.
Lorsque JavaScript effectue des opérations sur les bits, il utilise un type entier signé 32 bits, ce qui signifie que le résultat de la conversion est également un type entier signé 32 bits. Parfois, des résultats inattendus se produiront lorsque nous effectuerons un décalage. Ce qui suit est une comparaison entre le langage C et JS.
langage C
Copiez le code comme suit :
non signé int a = 3774191835u ;
int non signé b = a >> 2;
/* b == 943547958 */
Javascript
Copiez le code comme suit :
var a = 3774191835 ;
var b = une >> 2;
/* b == -130193866 */
Comme vous pouvez le constater, JavaScript utilise des entiers signés lors de l'exécution d'opérations sur les bits, nous obtenons donc des résultats différents. Comment le résoudre ?
Nous pouvons convertir les nombres signés en JavaScript en nombres non signés. Effectuez simplement l'opération de décalage >>>0.
Il est préférable de ne pas utiliser >>. Il est recommandé d'utiliser >>> car le bit le plus à gauche sera analysé comme un bit de signe. Lorsque le nombre déborde, il sera analysé comme un nombre négatif.