tutorial msd mdn mas licencia introduccion informacion actual javascript

msd - JavaScript: desplazamiento en el sentido de los bits de un número largo largo



msdn javascript (2)

Necesito desplazar un valor bit a bit 64 veces en JavaScript. Pero JavaScript comienza a redondearse después de 32 .

Por ejemplo:

for(var j = 0; j < 64; j++) { mask = mask << 1; console.log(mask); }

Esto imprime el valor de 0 a 1073741824 pero luego rondas de y comienza a imprimir 0 .


"En Java, los operadores bit a bit trabajan con enteros. JavaScript no tiene enteros. Solo tiene números de coma flotante de precisión doble. Por lo tanto, los operadores bit a bit convierten sus operandos numéricos en enteros, hacen sus negocios y luego los vuelven a convertir. En la mayoría de los lenguajes, estos operadores están muy cerca del hardware y muy rápido. En JavaScript, están muy lejos del hardware y son muy lentos. JavaScript rara vez se utiliza para manipular los bits ". - Douglas Crockford, Javascript: Las buenas partes

El punto es que realmente no tienes ninguna razón para usar operadores bit a bit. Simplemente multiplique o divida por 2 ^ numbits.

Tu código debería ser:

for(var j = 0; j < 64; j++) { mask = mask * 2; console.log(mask); }

O en general:

function lshift(num, bits) { return num * Math.pow(2,bits); }

Entiendes la idea.


JavaScript almacena todos sus números como 64 bit initally, pero tan pronto como comienzas a usar operadores bit a bit el intérprete convierte el número a una representación de 32 bits.

Los operadores bit a bit son un poco hacky en JS y tan molesto que probablemente tendrá que hacer algo un poco más inteligente, como escribir sus propias funciones de 64 bits.