在javascript中,在计算过程中是否按位或使用iee-754作为存储格式?

时间:2019-04-14 08:01:09

标签: javascript ieee-754 bitwise-or

如果在Javascript中使用ieee-754进行位或运算,我将无法理解结果。

例如:

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

1 个答案:

答案 0 :(得分:1)

JavaScript是ECMAScript的实现。 ECMAScript 2018 Language Specification (9th edition, June 2018)在第12.12节中指定二进制按位运算符。 12.12.3中的评估步骤包括(使用“ @”代表按位运算之一):

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

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