javascript - перевод - js исключающее или




Bitshift в JavaScript (2)

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

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

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

Но Javascript:

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

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


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

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

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

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


Как states Николай Закас:

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







bit-shift