0

如果使用按位或 ieee-754 计算 Javascript 中的结果,我无法理解结果。

例如:

2|1 =>3

在 ieee-754 中, 2存储为0 10000000000 0000...0000,并 1存储为0 01111111111 0000...0000

如果 exec 按位或,我认为结果是0 11111111111 0000...0000,但为什么会输出3

和上面一样,

例子:

0.1|0 =>0

0存储为0 00000000000 0000...0000, 并 0.1存储为0 01111111011 1001100110011001100110011001100110011001100110011010

如果 exec 按位或,我认为结果是0 01111111011 1001100110011001100110011001100110011001100110011010,但为什么它输出0,并丢失小数?

例子:

2|-1 =>-1

2存储为0 10000000000 0000...0000, 并 -1存储为1 01111111111 0000...0000

如果 exec 按位或,我认为结果是1 11111111111 0000...0000,但为什么会输出-1

4

1 回答 1

1

JavaScript 是 ECMAScript 的一个实现。ECMAScript 2018 语言规范(第 9 版,2018 年 6 月)在第 12.12 条中指定了二进制位运算符。12.12.3 中的评估步骤包括(使用“@”代表位运算之一):

  1. 让 lnum 是 ? ToInt32(lval)。
  2. 让 rnum 是 ? ToInt32(rval)。
  3. 返回将按位运算符 @ 应用于 lnum 和 rnum 的结果。结果是一个有符号的 32 位整数。

因此,不会对表示 a 的字节执行按位运算Number。的值Number被转换为整数的 32 位二进制补码表示,并对这些位执行操作。然后结果位被解释为 32 位二进制补码表示,因此它们表示的值成为操作产生的值。

于 2019-04-14T10:39:13.100 回答