为什么正数在Javascript
中按位运算或0运算并不总是正数例如:
3391700000|0
-903267296
4260919000|0
-34048296
2884900000|0
-1410067296
我在Linux上使用chrome 64位
相关答案 0 :(得分:2)
因为JavaScript最多使用32位整数,但要记住每个数字都是这种语言的浮点数
如果要将它们截断为无符号的32位值:
(3391700000|0) >>> 0
答案 1 :(得分:1)
在JavaScript中,按位运算符的操作数将转换为带有2位补码格式的带符号32位整数。这就是为什么你有一些数据丢失和截断的值有时是负面的,因为签名的二进制补码表示。
你可以参考我前段时间提到过的Why bitwise shift with 0 in JavaScript yields weird results in some cases线程,并且一些答案指出了你的操作数非常全面地超过32位整数的按位运算符的可能问题。