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

时间:2015-06-09 23:38:52

标签: javascript bitmask bit-masks

这主要只是一次健全检查。

Mozilla says

  

所有位运算符的操作数都转换为带符号的32位   两个补码格式的整数。

那个

  

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

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

1 个答案:

答案 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。