这主要只是一次健全检查。
Mozilla says
所有位运算符的操作数都转换为带符号的32位 两个补码格式的整数。
那个
数字-2147483648和2147483647是最小值和最大值 整数可通过32位有符号数表示。
由于2147483647是0x7FFFFFFF,我相信0x40000000(也就是说,不 0x80000000)是我可以安全地用作javascript标志值的最大数量。但我想确保我没有错过任何东西,或者没有其他陷阱。提前谢谢!
答案 0 :(得分:1)
值范围是完整的32位值,即。 0到0xffffffff(或2 32 -1)。如果它将签署或不依赖。如果它最初会被签名,那么这将产生-1:
document.write(0xffffffff>>0);

但你也可以使用无符号值,这意味着范围是[0,4294967295]:
document.write(0xffffffff>>>0);

数字0x40000000只能给你一半你的范围(在负数范围内,正数为0x40000000-1或0x3fffffff)所以这不是32的安全数字-bit signed range。
有符号数的安全范围是[0x80000000,0x7fffffff],因此公共安全边际掩码将为0x7fffffff,但是,您需要保留符号位:
number = number < 0 ? number & 0xffffffff : 0x7fffffff;
对于未签名的你的面具总是0xffffffff。