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

What is the maximum integer it is safe to use in a Javascript bitmask flag value?

这主要只是一个完整性检查。

Mozilla says

The operands of all bitwise operators are converted to signed 32-bit integers in two's complement format.

还有那个

The numbers -2147483648 and 2147483647 are the minimum and the maximum integers representable through a 32bit signed number.

由于 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],因此常见的安全范围 mask 为 0x7fffffff,但是,您需要保留符号-位:

number = number < 0 ? number & 0xffffffff : 0x7fffffff;

对于未签名的,您的掩码将始终为 0xffffffff。