【问题标题】:The minimum value of a 32-bit signed integer?32位有符号整数的最小值?
【发布时间】:2014-03-19 06:58:36
【问题描述】:

为什么不是这样的最小值:

11111111 11111111 11111111 11111111

请帮助我理解这一点。

【问题讨论】:

标签: integer minimum


【解决方案1】:
11111111 11111111 11111111 11111111
↑
MSB is 1 indicating that the number is negative

实际上是-1。为什么?

要计算一个数字的two's complement,您翻转所有位并加1。对您建议的数字执行此操作将得到:

00000000 00000000 00000000 00000001

这是1,但符号为负。所以你得到-1。

你可能想试试:

10000000 00000000 00000000 00000000

如果你计算上面的数字,你会得到:

01111111 11111111 11111111 11111111    flip
00000000 00000000 00000000 00000001 +  add 1
-----------------------------------
10000000 00000000 00000000 00000000

这确实是最小值。

【讨论】:

  • 不使用 2 的补码的系统或拱门呢?
  • @al-Khwārizmī 实际上我不确定.. 希望知道的人回答你。
  • @al-Khwārizmī -- 如-2 < -1 表示“11111111 11111111 11111111 11111111”将是最小的负数(以及最大正数),可以用 4 字节表示。 ...虽然 OP 自己说的是 32 位有符号数。
【解决方案2】:

让我们用一个 3 位的例子来保持简单。

表示为 3 位二进制数的值 0000

如果我们从0 中减去1,我们得到-1。如果我们从000 中减去1,我们会得到带有“脱落”的借位的111,因为我们只有3 位。

如果我们继续减 1,我们得到:

-1  111
-2  110
-3  101
-4  100

如果我们从0 开始并添加1,我们会得到正数:

+1  001
+2  010
+3  011

但是当我们尝试添加另一个1 时,我们得到-4 的表示形式而不是+4

这就像您尝试将汽车上的里程表倒回时会发生的情况一样。一旦达到 0,下一个数字将是 9999999(或者里程表上有多少个数字),但这自然可以被认为是 -1 的表示。当您进一步回退时,该数字将远离所有 9,但​​它会代表更多的负值。我们可以说,如果最左边的数字在 0 和 4 之间,那么这个数字是正数,如果它在 5 和 9 之间,那么它是负数。随着我们继续往回走,我们最终会达到 5000000,这是最负值。再次回退会导致溢出,因为我们得到 4999999,我们认为它是正数(最正值)。顺便说一句,这被称为 10 的补码,Charles Babbage 用它来表示他的差分引擎中的负数。

【讨论】:

    【解决方案3】:

    根据每个位的“位值”来考虑这一点。为了篇幅,让我们暂时考虑一个 8 位有符号整数,它的值可以在 -128 和 +127 之间。

    这个整数中每一位的位置值,从最低到最高:

    • +1 (LSB)
    • +2
    • +4
    • +8
    • +16
    • +32
    • +64 (MSB)
    • -128(符号位)

    这意味着最大值表示为01111111 (+127),最小值表示为10000000 (-128)。 11111111 代表-1。

    同样的原则适用于 32 位有符号整数,只是位值更大(特别是符号位为 -2147483648)。

    【讨论】:

      【解决方案4】:

      在有符号整数中,MSB 代表符号1=-ve0=+ve
      所以,机器实际上将它们存储在0x00000000 - 0xffffffff范围内
      但由于它是signed,它必须同时包含正数和负数,因此解释将其更改为[-0x0fffffff + 1, 0x0fffffff][0x10000000,0x0fffffff] 手语。

      范围均分 - [-2^31,2^31-1]

      【讨论】:

        猜你喜欢
        • 2013-10-05
        • 2015-04-06
        • 2015-10-15
        • 1970-01-01
        • 2011-03-15
        • 2019-05-30
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多