这主要是一个安全检查。
Mozilla说
所有位操作符的操作数都转换为有符号32位二进制补码格式的整数。
和
-2147483648和2147483647分别是最小值和最大值可以用32位有符号数表示的整数。
由于2147483647是0x7FFFFFFF,我相信0x40000000(也就是说,不是 0x80000000)是我可以安全地用作javascript标志值的最大数字。但我想确保我没有错过什么,或者没有其他的陷阱。提前感谢!
取值范围为完整的32位值,即。0到0xffffffff(或232-1)。它是否会被签署取决于。如果它一开始就被签名,那么这将产生-1:
document.write(0xffffffff>>0);
但是你也可以使用无符号值,这意味着范围是[0,4294967295]:
document.write(0xffffffff>>>0);
数字0x40000000只会给你一半的范围(在负范围中,在正范围中它将是0x40000000-1或0x3fffffff),所以这不是32位带符号范围的安全数字。
有符号数字的安全范围将是[0x80000000, 0x7fffffff],因此常见的安全距掩码将是0x7fffffff,但是,您需要保留符号位:
number = number < 0 ? number & 0xffffffff : 0x7fffffff;
对于unsigned,你的掩码总是0xffffffff。