Сдвиг разряда в JavaScript

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

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

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

Но JavaScript:

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

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

21
задан Jon Seigel 3 May 2010 в 02:54
поделиться

3 ответа

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

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

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

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

26
ответ дан 29 November 2019 в 21:24
поделиться

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

Для проверки обрежьте цифру «5» в начале вашего числа так, чтобы вы попали в 32-битную границу. Тогда ваша смена должна работать нормально.

2
ответ дан 29 November 2019 в 21:24
поделиться

Как утверждает Николас Закас :

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

2
ответ дан 29 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: