0

这主要只是一个健全性检查。

Mozilla_

所有位运算符的操作数都转换为二进制补码格式的有符号 32 位整数。

然后

数字 -2147483648 和 2147483647 是可通过 32 位有符号数表示的最小和最大整数。

由于 2147483647 是 0x7FFFFFFF,我相信 0x40000000(也就是说,不是0x80000000)是我可以安全地用作 javascript 标志值的最大数。但我想确保我没有错过任何东西或者没有其他问题。先感谢您!

4

1 回答 1

2

取值范围是一个完整的 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。

于 2015-06-09T23:47:06.887 回答