Чому позитивне число оперується порозрядним або 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-бітні цілі числа.