Javascript 2和x2019之间的关系是什么;s补码和IEEE754?

Javascript 2和x2019之间的关系是什么;s补码和IEEE754?,javascript,floating-point,ieee-754,twos-complement,Javascript,Floating Point,Ieee 754,Twos Complement,我过去认为所有的数字都是以2的补码格式存储在计算机中的。2的补码中没有-0。但在IEEE754中,同时存在+0和-0。我在JavaScript中读到,所有数字都是IEEE754。所以现在我很困惑。而且,在JavaScript中,~a=-a-1。我过去认为这是由数字a的补码2的变化引起的。但是,如果JavaScript中的每个数字都存储为IEEE754,我们如何将其转换为2的补码?JavaScript欺骗:它使用IEEE-754基本64位二进制浮点格式表示数字,但将其转换为32位整数进行逐位运算,

我过去认为所有的数字都是以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语言规范(第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. 一元表达式:~一元表达式 1.让expr作为计算一元表达式的结果。 2.让我们一起去吧?ToInt32(?GetValue(expr))。 3.返回对oldValue应用位补码的结果。结果是一个有符号的32位整数。
ToInt32
操作将数字截断为整数(删除任何小数部分,向零舍入),然后将数字映射到间隔[−231,+231)模232。

2的补码是整数值的表示方式。浮点值是另一种本机格式,这些值表示二进制指数表示法。@Pointy谢谢。所以在JavaScript中,整数值也表示为浮点值,表示为IEEE754,对吗?好的JavaScript numBER始终是双精度浮点值。在使用布尔运算符(如
~
|
)计算子表达式的过程中,会使用32位整数值,但一旦值保存在变量或对象属性中,它就始终是浮点值。“在JavaScript中,整数值也表示为浮点值,这对吗?”——不,JavaScript中没有整数。@JörgWMittag:您引用的文本是“整数值”JavaScript确实有整数值。它使用IEEE-754浮点类型来表示数字,其格式能够表示许多整数值。