如果使用Bitwise OR 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
?
JavaScript是ECMAScript的一个实现。 ECMAScript 2018 Language Specification (9th edition, June 2018)在第12.12节中指定了二进制位运算符。 12.12.3中的评估步骤包括(使用“@”表示其中一个按位操作):
因此,不对表示Number
的字节执行按位运算。 Number
的值被转换为整数的32位二进制补码表示,并对这些位执行操作。然后将结果位解释为32位二进制补码表示,因此它们表示的值将成为操作产生的值。