【问题标题】:Why is ~3 equal to -4 in Python?为什么〜3在Python中等于-4?
【发布时间】:2011-04-24 10:10:48
【问题描述】:

我开始使用 Python 编程。我正在阅读基本教程,但这一点对我来说不是很清楚。如果您能给我任何帮助,我将不胜感激。

【问题讨论】:

  • 这与 pyton 无关,而是与负数在二进制中的表示方式有关(参见 wikipedia/google 了解 2 的补码)。
  • @skaffman: 这与python无关
  • @SilentGhost:然后编辑标题。
  • @skaffman:标题很好
  • 每种语言都使用 ~ 运算符吗?如果不是,那么我不明白为什么 Python 标记不好。

标签: twos-complement


【解决方案1】:

~3 的意思是“将所有的 1 变为 0,将 0 变为 1”,所以如果二进制中的 3 是 0000000000000011,那么 ~3 就是 1111111111111100。由于 ~3 的第一位是 1,所以它是一个负数。为了找出哪个负数,在 2s 的赞美中,你反转所有位并加 1,所以反转我们回到 3,然后加 1 我们得到 4。

【讨论】:

    【解决方案2】:

    不仅仅是 Python,它是几乎所有现代计算机的整数数字表示:二进制补码。根据二进制补码的定义,您可以通过对正数进行补码并加一来获得负数。在您的示例中,您补充了 ~ 但没有加一,因此您的数字的负数减一。

    【讨论】:

      【解决方案3】:

      它是反转运算符,并返回你给它的数字的按位倒数。

      【讨论】:

        【解决方案4】:

        因为有符号整数通常使用two's complement 存储,这意味着整数的按位倒数等于其代数倒数减一。

        【讨论】:

          【解决方案5】:

          ~3 表示“反转” 3。对于自然数数据类型,two's complement 变为 -4,因为二进制表示被反转(所有位都被翻转)。

          【讨论】:

          • 只是以十六进制显示:3 = 0x00000003 ~3 = 0xFFFFFFFC 并且数字是有符号的,因此它是负数。
          猜你喜欢
          • 2016-05-09
          • 2015-05-10
          • 2021-02-14
          • 1970-01-01
          • 1970-01-01
          • 2019-04-27
          • 2011-12-19
          • 2013-02-05
          • 2017-07-10
          相关资源
          最近更新 更多