32位有符号整数的最小值?

时间:2014-03-19 06:58:36

标签: integer minimum

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

11111111 11111111 11111111 11111111

请帮助我理解这一点。

4 个答案:

答案 0 :(得分:4)

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

这确实是最小值。

答案 1 :(得分:2)

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

此整数中每个位的位置值从最小到最重要:

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

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

同样的原理适用于32位有符号整数,只有较大的位值(具体来说,符号位为-2147483648)。

答案 2 :(得分:2)

让我们使用一个3位示例来保持简单。

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

如果我们从1中减去0,我们会得到-1。如果我们从1中减去000,我们会得到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 :(得分:1)

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

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