在Javascript位掩码标志值中安全使用的最大整数是多少?



这主要是一个安全检查。

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。

最新更新