En JavaScript, todas las variables enteras son números enteros con signo de forma predeterminada. ¿Qué significa esto?
Los enteros con signo utilizan 31 bits para representar el valor del número entero, y el bit 32 para representar el signo del número entero 0 representa un número positivo y 1 representa un número negativo.
El rango de valores es de -2^31 - 2^31-1, que es -2147483648 a 2147483647.
Cuando JavaScript realiza operaciones de bits, utiliza un tipo entero con signo de 32 bits, lo que significa que el resultado de la conversión también es un tipo entero con signo de 32 bits. A veces, se producirán resultados inesperados cuando realizamos cambios. La siguiente es una comparación entre el lenguaje C y JS.
lenguaje c
Copie el código de código de la siguiente manera:
int sin signo = 3774191835u;
int sin signo b = a >> 2;
/* b == 943547958 */
javascript
Copie el código de código de la siguiente manera:
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
Como puede ver, JavaScript utiliza enteros con signo al realizar operaciones de bits, por lo que obtenemos resultados diferentes. ¿Cómo solucionarlo?
Podemos convertir números con signo en JavaScript en números sin signo. Simplemente haga la operación de cambio >>>0.
Es mejor no usar >>. Se recomienda usar >>> porque el bit más a la izquierda se analizará como un bit de signo. Cuando el número se desborde, se analizará como un número negativo.