为什么 JavaScript 中的 OR 0 对数字进行四舍五入?

hch*_*hau 4 javascript bit-manipulation

我的印象是,根据 IEEE 浮点标准,Javascript 中的 Number 类型可以存储任何数字,整数或浮点数。如果是这样,那么为什么要将数字与 0 进行按位或运算,将其向下舍入呢?

尝试其他一些位操作,似乎在对浮点数应用位操作时,该数字首先向 0 舍入,然后应用位操作(数字采用二进制补码表示形式,而不是 IEEE)。它是否正确?

bfa*_*tto 5

在 ECMAScript 5.1 中,所有按位运算都会将输入转换为 32 位整数,并返回 32 位整数。关于运算符^&|第 11.10 节说:

生产A : A @ B,其中@是上述产生式中的按位运算符之一,计算如下:

1) 令 lref 为计算 A 的结果。
2) 令 lval 为 GetValue(lref)。
3) 令rref 为B 的求值结果。
4) 令rval 为GetValue(rref)。
5) 令 lnum 为 ToInt32(lval)。
6) 令 rnum 为 ToInt32(rval)。
7) 返回将按位运算符@应用于lnum和rnum的结果。结果是一个带符号的 32 位整数。

请注意,在应用运算符之前, ToInt32已应用于两侧。