在javascript中设置位31正确吗?

在javascript中设置位31正确吗?,javascript,bitwise-operators,bit-shift,Javascript,Bitwise Operators,Bit Shift,当我尝试设置31位0 | 1时,大多数按位操作都指定为将其操作数转换为有符号32位整数。使用位31是完全正确的,但是是的,您将得到负值。通常情况下,不管你是否在进行逐位运算,因为你(应该)关心的是位模式,而不是数字的十进制值 如果确实希望返回正值,可以使用>>0将其转换回正值,因为>>指定将其操作数转换为无符号32位整数 console.log((0 | 1 << 31) >>> 0); console.log((0 | 1>>0); 表示按位运算符和移位运算符对

当我尝试设置31位
0 | 1时,大多数按位操作都指定为将其操作数转换为有符号32位整数。使用位31是完全正确的,但是是的,您将得到负值。通常情况下,不管你是否在进行逐位运算,因为你(应该)关心的是位模式,而不是数字的十进制值

如果确实希望返回正值,可以使用
>>0
将其转换回正值,因为
>>
指定将其操作数转换为无符号32位整数

console.log((0 | 1 << 31) >>> 0);
console.log((0 | 1>>0);
表示按位运算符和移位运算符对32位整数进行操作,因此在这种情况下,最大安全整数为2^31-1或2147483647

这里有一个


您设置的是32位,而不是31位。谢谢您的回答。您对@tkausl comment
有何看法您设置的是32位,而不是31位?这是第32位(从1开始计算),但它是第31位(从0开始计算)。谢谢你的帮助!谢谢你的回答。你能解释一下我的方法有错误吗?@Erik,我想
sjrd
有一个很好的答案,还有更多细节,请参考此
console.log((-2147483648).toString(2)) // -10000000000000000000000000000000
console.log((0 | 1 << 31) >>> 0);