在javascript中,Bitwise OR是否在计算过程中使用ieee-754作为存储格式?

问题描述 投票:0回答:1

如果使用Bitwise OR ieee-754来计算Javascript中的结果,我无法理解结果。

例如:

2|1 =>3

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

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

与上面一样,

例:

0.1|0 =>0

0存储为0 00000000000 0000...00000.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

javascript ieee-754 bitwise-or
1个回答
1
投票

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

  1. 让lnum成为? ToInt32(lval中)。
  2. 让rnum? ToInt32(撕)。
  3. 返回将按位运算符@应用于lnum和rnum的结果。结果是带符号的32位整数。

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

© www.soinside.com 2019 - 2024. All rights reserved.