2的补码和IEEE754有什么关系?
What is the relationship between 2’s complement and IEEE754?
我曾经以为所有的数字都是以2的补码格式存储在计算机中的。并且 2 的补码中没有 -0。但是在IEEE754中,+0和-0都有。我在 JavaScript 中读到,所有数字都是 IEEE754。所以现在我很困惑。更何况,在JavaScript中,~a = -a -1。以前一直以为是a数2的补码变化引起的。但是如果JavaScript中的每一个数字都存储为IEEE754,我们如何将其转换为2的补码?
JavaScript秘籍:使用IEEE-754基本64位二进制浮点格式表示数字,但将其转换为32位整数进行按位运算,然后再转换回来。
JavaScript 是 ECMAScript 的一个实现。 ECMAScript 2018 语言规范(第 9th 版,2018 年 6 月)在条款 12.5.8 中指定了一元 ~
运算符(在 table 中显示为 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
操作将数字截断为整数(去除任何小数部分,向零舍入),然后将数字映射到区间[−231 , +231) 模 232.
我曾经以为所有的数字都是以2的补码格式存储在计算机中的。并且 2 的补码中没有 -0。但是在IEEE754中,+0和-0都有。我在 JavaScript 中读到,所有数字都是 IEEE754。所以现在我很困惑。更何况,在JavaScript中,~a = -a -1。以前一直以为是a数2的补码变化引起的。但是如果JavaScript中的每一个数字都存储为IEEE754,我们如何将其转换为2的补码?
JavaScript秘籍:使用IEEE-754基本64位二进制浮点格式表示数字,但将其转换为32位整数进行按位运算,然后再转换回来。
JavaScript 是 ECMAScript 的一个实现。 ECMAScript 2018 语言规范(第 9th 版,2018 年 6 月)在条款 12.5.8 中指定了一元 ~
运算符(在 table 中显示为 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
操作将数字截断为整数(去除任何小数部分,向零舍入),然后将数字映射到区间[−231 , +231) 模 232.