这主要只是一个健全性检查。
Mozilla说_
所有位运算符的操作数都转换为二进制补码格式的有符号 32 位整数。
然后
数字 -2147483648 和 2147483647 是可通过 32 位有符号数表示的最小和最大整数。
由于 2147483647 是 0x7FFFFFFF,我相信 0x40000000(也就是说,不是0x80000000)是我可以安全地用作 javascript 标志值的最大数。但我想确保我没有错过任何东西或者没有其他问题。先感谢您!
这主要只是一个健全性检查。
Mozilla说_
所有位运算符的操作数都转换为二进制补码格式的有符号 32 位整数。
然后
数字 -2147483648 和 2147483647 是可通过 32 位有符号数表示的最小和最大整数。
由于 2147483647 是 0x7FFFFFFF,我相信 0x40000000(也就是说,不是0x80000000)是我可以安全地用作 javascript 标志值的最大数。但我想确保我没有错过任何东西或者没有其他问题。先感谢您!
取值范围是一个完整的 32 位值,即。0 到 0xffffffff(或 2 32 -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;
对于未签名的,您的掩码将始终为 0xffffffff。