gpt4 book ai didi

javascript - 为什么 ~-1 等于 0 而 ~1 等于 -2?

转载 作者:数据小太阳 更新时间:2023-10-29 05:43:25 30 4
gpt4 key购买 nike

根据小节 11.4.8 ECMAScript 5.1 标准:

The production UnaryExpression : ~ UnaryExpression is evaluated as follows:

  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。在我的理解 ToInt32(1)ToInt32(-1) 将返回相同的值 1 ,但为什么 ~-1 等于 0 和~1等于-2?

现在我的问题是为什么 ToInt32(-1) 等于 -1?小节9.5 ECMAScript 5.1 标准:

The abstract operation ToInt32 converts its argument to one of 232 integer values in the range −231 through 231−1, inclusive. This abstract operation functions as follows:

  1. Let number be the result of calling ToNumber on the input argument.
  2. If number is NaN, +0, −0, +∞, or −∞, return +0.
  3. Let posInt be sign(number) * floor(abs(number)).
  4. Let int32bit be posInt modulo 232; that is, a finite integer value k of Number type with positive sign and less than 232 in magnitude such that the mathematical difference of posInt and k is mathematically an integer multiple of 232.
  5. If int32bit is greater than or equal to 231, return int32bit − 232, otherwise return int32bit.

当参数为-1时,根据9.5,在步骤 1数字仍然是-1,跳过步骤 2在第 3 步posInt 将为 -1在第 4 步int32bit 将为 1在第 5 步,它将返回 1

哪一步错了?

最佳答案

32位整数中的-1

1111 1111 1111 1111 1111 1111 1111 1111

所以 ~-1 将是

0000 0000 0000 0000 0000 0000 0000 0000

这是零。

32位整数中的1

0000 0000 0000 0000 0000 0000 0000 0001

所以 ~1 将是

1111 1111 1111 1111 1111 1111 1111 1110

这是-2

你应该阅读 two's complement理解负整数在二进制中的显示。

关于javascript - 为什么 ~-1 等于 0 而 ~1 等于 -2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257755/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com