2015-10-14 4 views
4

Как я понимаю, JS обрабатывает числа как 32 бита при выполнении операций с бит-сдвигом, хотя поддерживает 64-битные номера.Как левый сдвиг чисел больше 32 бит?

Как я могу реализовать функцию leftShift, которая работает на 64-битных номерах? то есть он не перевернется в негативы для чего-то вроде 192 << 24 (должно быть 3221225472, а не -1073741824).

+2

номер Javascript является 64-бит с плавающей точкой, они имеют только 53 бит мантиссы. Таким образом, невозможно получить 64-битные целые числа. – Barmar

+0

@ Бармар. Все в порядке. Мне просто нужно 32 бита без знака. 53 есть много: D – mpen

+2

Используйте '192 <<24> >> 0' как показано в вопросе, с которым я связан. – Barmar

ответ

5

Просто делать то, что математика из left shift делает:

Арифметических сдвиги эквивалентно умножения на положительном (слева) или отрицательное число (справа), интегральная мощность радикса (например, умножение на 2 для двоичных чисел).

function shift(number, shift) { 
    return number * Math.pow(2, shift); 
} 

shift(192, 24) 
//3221225472 

shift(3221225472, -24) 
//192 
+0

Спасибо. Я думал, что все так просто, но я не был уверен, что я что-то пропустил. – mpen

Смежные вопросы