【问题标题】:How are negative numbers represented in 32-bit signed integer?32 位有符号整数如何表示负数?
【发布时间】:2010-05-28 18:39:59
【问题描述】:

32 位有符号整数如何表示负数? 是补码还是补码?或者左边的最后一位就像一面旗帜? 例如:(-10)

【问题讨论】:

  • 在什么情况下?不同的系统/平台会做不同的事情。
  • 你的意思是“左边的第一位”吗?

标签: binary numbers


【解决方案1】:

如今,大多数计算机使用 two's complement 表示有符号整数,但它可能因硬件架构、编程语言或其他特定于平台的问题而异。

对于二进制补码表示,最高有效(“最左边”)位称为符号位,它将被设置为负整数并清除非负整数。然而,它不仅仅是一面“旗帜”。请参阅Wikipedia article 了解更多信息。

【讨论】:

  • 那么前面的位将 1 表示负数,0 表示正数? 0 呢?
  • 零由所有位为零来表示。
【解决方案2】:

通常是补码。

【讨论】:

    【解决方案3】:

    来自 C99 标准:

    对于有符号整数类型,位 对象表示应为 分为三组:值位, 填充位和符号位。那里 不必是任何填充位;那里 应该是一个符号位。每个 作为值位的位应具有 相同的值作为相同的位 的对象表示 对应的无符号类型(如果有 是有符号类型的 M 值位 和 N 为无符号类型,则 M = N)。如果符号位为零,则应 不影响结果值。如果 符号位为 1,值应为 通过以下方式之一进行修改:

    ——带符号的对应值 位 0 取反(符号和大小);

    ——符号位的值为 -(2N) (二进制补码);

    ——符号位的值为 -(2N - 1) (一个补码)。

    以下哪项适用 实现定义,是否 符号位 1 和所有的值 值位为零(对于前两个), 或带有符号位和所有值位 1 (对于一个的补码),是一个陷阱 表示或正常值。在 符号和大小的情况和 一个的补码,如果这个 表示是一个正常值 称为负零。

    【讨论】:

      【解决方案4】:

      我认为答案是0110,前面有 1 重复 28 次,因此它看起来像:

      1111 1111 1111 1111 1111 1111 1111 0110;

      步骤:

      1. 10 的位表示为:

        0000 0000 0000 0000 0000 0000 0000 1010;

      2. 0->11->0 表示所有位:

        1111 1111 1111 1111 1111 1111 1111 0101;

      3. 将最后一位加 1,并传播到前面的位,完成!

        1111 1111 1111 1111 1111 1111 1111 0110;

      ===

      您可以通过将其与 10 相加来验证,您将得到所有位的 0。如上所述,它是从 2 开始的,并且遵循二进制补码。

      【讨论】:

      • 解释清楚。请你用这种解释的方法来解释浮点数是如何存储的。
      【解决方案5】:
      0xFFFFFFFF = -1
      0xFFFFFFFE = -2
      0xFFFFFFFD = -3
      ... 
      

      等等

      【讨论】:

        【解决方案6】:

        最高有效位(左侧最后一位)设置为负数。

        【讨论】:

        • 你的意思是“左边的第一位”吗?
        • “左边的第一位”或“右边的最后一位”怎么样。 :)
        【解决方案7】:

        仅供参考:negation -> adding one

        5为例,8位,引用自wiki

        to convert 5 to -5: 0000 0101 - flip -> 1111 1010 - add one -> 1111 1011
        

        有一个技巧可以将数字从正数转换为负数,反之亦然:

        忽略它们的符号位(最左边的位)添加它们会给你2^N(其中 N 是表示数字的位数)。

        如上面 8 位 表示中的示例,5 (0000 0101)-5 (1111 1011) 的总和将为您提供 1 0000 0000,即 (2 ^ 8)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-12
          • 1970-01-01
          • 2011-01-31
          • 1970-01-01
          • 2021-08-13
          • 1970-01-01
          相关资源
          最近更新 更多