У меня есть действительно большое количество: 5799218898. И хочу сместить его правильный к 13 битам.
Так, калькулятор окон или 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.)
Ваш номер (5799218898) превышает 32 бита. Вы не упомянули движок JavaScript, который тестируете, но вполне вероятно, что он 32-битный.
Для проверки обрежьте цифру «5» в начале вашего числа так, чтобы вы попали в 32-битную границу. Тогда ваша смена должна работать нормально.
Как утверждает Николас Закас :
Хотя числа JavaScript технически хранятся в 64-битном формате, целое число Значения обрабатываются так, как если бы они были 32 битами, когда задействованы побитовые операторы.