如果 `number` 没有存储为整数,JS 按位运算如何工作?

How do JS bitwise operations work if `number` is not stored as an integer?

根据this,JavaScript number 被存储为浮点值。那么一个整数值不也被分解成它的特征和尾数部分吗?如果是这样,按位运算符如何工作? 100 >>1 正确给出 50。~2 正确给出 -3(2 的补码)。

我刚刚意识到我有一个使用“位掩码”的 5 年前的应用程序。基本上,我使用 16 位模式让每一位代表不同的权限角色。因此,使用的值是从 0 到 65535。到目前为止它一直运行良好。我想知道我是否需要先解决这个问题。

JavaScript 实现将每个浮点表示形式转换为 32 位整数并应用按位运算符。

JavaScript 是 ECMAScript 的一个实现。 ECMAScript 2020 Language Specification 描述了第 6.1.6.1.16 节中的双操作数按位运算,其中显示每个操作数都使用 ToInt32 函数转换为整数。 (这是规范中的抽​​象操作,不一定是实现中的实际功能。)第 7.1.6 节描述了 ToInt32 操作。对于无穷大,它 returns 为零。否则,它会有效地丢弃小数部分和 returns 有符号整数部分的低 32 位(将它们视为二进制补码)。

单操作数 ~ 运算符在 6.1.6.1.2 中单独讨论,但也将 ToInt32 应用于其操作数。

关于 ECMAScript 规范的两个注意事项

那link是通用的;以后可能会更新到以后的版本,而不是2020版。

不寻常的“!”和 ”?”在操作描述中,在第 5.2.3.4 节“ReturnIfAbrupt Shorthands”中进行了描述。所以 ”! ToInt32(x)”在文中说的是按照一定的规则执行“ToInt32(x)”,而不是对“进行逻辑取反ToInt32(x)”.