operador - Bitshift en javascript
operador xor javascript (3)
Tengo un número realmente grande: 5799218898. Y quiero cambiarlo a 13 bits.
Entonces, windows-calculator o python me da:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 70791 | 10001010010000111
Como se esperaba.
Pero Javascript:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 183624 | 101100110101001000
Lo creo debido a la representación de enteros internos en javascript, pero no puedo encontrar nada al respecto.
Como states Nicholas Zakas:
Aunque los números de JavaScript se almacenan técnicamente en 64 bits, los valores enteros se tratan como si fueran de 32 bits cuando se trata de operadores bitwise.
El número que tiene (5799218898) está más allá de los 32 bits. No mencionó el motor de JavaScript con el que está probando, pero es muy probable que sea de 32 bits.
Para probar, recorte el "5" al principio de su número para que quede dentro del límite de 32 bits. Entonces tu turno debería funcionar bien.
En ECMAScript (Javascript) las operaciones bitwise están siempre en 32 bits. Por lo tanto, 5799218898 se corta en 32 bits, que se convierte en 1504251602. Este número entero >> 13 da 183624.
En Python son enteros de longitud arbitraria. Así que no hay problema.
(Y los números en la calculadora de Windows son de 64 bits, lo suficiente para que quepan 5799218898.)
(Y la respuesta correcta debe ser 707912.)