2的补码和IEEE754之间是什么关系?

时间:2018-11-23 18:29:40

标签: javascript floating-point ieee-754 twos-complement

我以前认为所有数字都以2的补码格式存储在计算机中。而且2的补码中没有-0。但是在IEEE754中,同时有+0和-0。我读过JavaScript,所有数字均为IEEE754。所以现在我很困惑。此外,在JavaScript中,〜a = -a -1。我以前认为这是由于数字a的2的补码的变化引起的。但是,如果JavaScript中的每个数字都存储为IEEE754,我们如何将其转换为2的补码?

1 个答案:

答案 0 :(得分:2)

JavaScript作弊技巧:它使用IEEE-754基本的64位二进制浮点格式表示数字,但将其转换为32位整数以进行按位运算,然后将其转换回去。

JavaScript是ECMAScript的实现。 ECMAScript 2018语言规范(第9版,2018年6月)在第12.5.8节中指定了一元~运算符(在目录中显示为12.5.10,但在目录中显示为12.5.8)文本!)。相关部分是:

UnaryExpression : ~ UnaryExpression
1. Let expr be the result of evaluating UnaryExpression.
2. Let oldValue be ? ToInt32(? GetValue(expr)).
3. Return the result of applying bitwise complement to oldValue. The result is a signed 32-bit integer.

ToInt32操作将数字截断为整数(删除任何小数部分,四舍五入为零),然后将数字映射到区间[−2 31 ,+ 2 31 )模2 32