Я несколько понимаю, что JS использует числа с плавающей запятой и преобразует их как целые числа при выполнении сдвига, что приводит к другим значениям, чем на других языках:

1801876324 << 25

Это выводит -939524096 в JS, но гораздо более длинное значение на других языках (147634913777578...)

Как я могу имитировать поведение JS?

-1
Ivan 2 Янв 2018 в 06:06

2 ответа

Лучший ответ

Вы совершенно правы в своем мышлении.

Рассмотрим: шестнадцатеричный (1801876324) == 0x6b667364

Шестнадцатеричный (1801876324 << 25) == 0xd6cce6c8000000

После усечения до 32 бит конечное значение будет 0xc8000000, что в арифметике с дополнением до двух оказывается равным -939524096.

2
oakad 2 Янв 2018 в 03:21

Сдвиг числа означает: просто умножьте или разделите на 2 ^ число вроде.

for(i=0;i<numdigit;i++) largeNum = largeNum*2

или

for(i=0;i<numdigit;i++) largeNum = largeNum/2

0
DHARMENDRA SINGH 2 Янв 2018 в 03:47