/ / Чому додаткове число, опероване з порозрядним або 0, не завжди позитивне в Javascript - javascript, побітові оператори

Чому позитивне число працювало побітовим або 0 не завжди позитивним у Javascript - javascript, bitwise-оператори

Чому позитивне число оперується порозрядним або 0 не завжди позитивним у Javascript

Наприклад:

3391700000|0
-903267296

4260919000|0
-34048296

2884900000|0
-1410067296

Я використовую хромований 64-бітний Linux

пов'язані з: https://stackoverflow.com/a/12837315/1620210

Відповіді:

2 для відповіді № 1

Оскільки JavaScript використовує не більше 32-бітових цілих чисел, але майте на увазі, що кожне число є різновидом float цією мовою

Якщо ви хочете усікати їх до непідписаного 32-бітного значення:

(3391700000|0) >>> 0

1 для відповіді № 2

У JavaScript операнди побітових операторів перетворюються на підписані 32-бітні цілі числа у форматі 2-х комплементу. Ось чому ви втратили дані, а усічені значення іноді є негативними через підписане представлення двох доповнень.

Ви можете послатися на Чому побітове зміщення на 0 в JavaScript дає дивні результати в деяких випадках нитка, яку я задав деякий час тому назад, і деякі відповіді вказували на можливу проблему з побітними операторами, коли ваші операнди дуже всебічно перевищують 32-бітні цілі числа.