我需要使用按位运算符执行某些操作,假设我们有这样的40位无符号整数:
当我对它应用OR
运算符和无符号右移运算符时,我得到了这个负整数
Input:(1071698660929 >>> 0) | 0b0
.
Output:-2043163071
.
我注意到,只要数字是31位长,添加0B0
就没有任何问题,但当数字大于31位时,即使我使用的是无符号右移位运算符,它也会变成负数:
32位二进制返回-1
:(0b11111111111111111111111111111111 >>> 0) | 0
31位二进制返回2147483647
:(0b1111111111111111111111111111111 >>> 0) | 0
所以我有几个问题:
- 如果我使用右移位运算符,为什么上面的数字会变成负数?我所理解的是,javascript中的最大安全整数是53位长
Number.MAX_SAFE_INTEGER.toString(2).length
,所以我在整数安全边界内. - 我要怎么做才能得到这
(1071698660929 >>> 0) | 0b0
个回报?1071698660929
而不是-2043163071
?