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