Подтвердить что ты не робот

Bitshift в javascript

У меня действительно большой номер: 5799218898. И хочу перевести его прямо на 13 бит.
Итак, windows-калькулятор или python дает мне:

5799218898 >> 13 | 100010100100001110011111100001 >> 13
70791            | 10001010010000111

Как и ожидалось.

Но Javascript:

5799218898 >> 13 | 100010100100001110011111100001 >> 13
183624           | 101100110101001000

Я думаю, это из-за внутреннего целочисленного представления в javascript, но ничего не могу найти об этом.

4b9b3361

Ответ 1

В ECMAScript (Javascript) побитовые операции всегда находятся в 32-разрядной версии. Поэтому 5799218898 рубится на 32-битный, который становится 1504251602. Это целое число → 13 дает 183624.

В Python они являются целыми числами произвольной длины. Поэтому проблем нет.

(И цифры в калькуляторе Windows 64-бит, достаточно, чтобы соответствовать 5799218898.)

(И правильный ответ должен быть 707912.)

Ответ 2

Число, которое у вас есть (5799218898), превышает 32 бит. Вы не упоминали о движке JavaScript, с которым вы тестируете, но очень вероятно, что он 32-разрядный.

Чтобы проверить, обрезайте "5" в начале вашего номера, чтобы вы попали внутрь 32-битной границы. Тогда ваша смена должна работать нормально.

Ответ 3

Как Николас Закас состояния:

Несмотря на то, что номера JavaScript технически хранится в 64-битных, целых значения обрабатываются так, как будто theyre 32 бит, когда побитовые операторы участие.