为什么int32的最大值为2 ^ 31 -1

时间:2010-09-29 23:46:30

标签: c# types integer

  

可能重复:
  What is "2's Complement"?

我知道int32的长度为32位(4字节)。我假设它有2 ^ 32个值但是其中一半需要低于零,我猜它与此有关。 我想知道为什么int32具有最大值。正数2 ^ 31 -1。

4 个答案:

答案 0 :(得分:38)

这个最重要的位用于编码符号(1表示负数),因此实际值只有31位可用。

Int32.MaxValue =  2^31 - 1 = 01111111111111111111111111111111
                  1        = 00000000000000000000000000000001
                  0        = 00000000000000000000000000000000
                 -1        = 11111111111111111111111111111111
Int32.MinValue = -2^31     = 10000000000000000000000000000000

答案 1 :(得分:25)

2 ^ 32个可能的值

- 用于negative integers

的2 ^ 31个值

- 1用于零的值

= 2 ^ 31-1值可用于正整数

答案 2 :(得分:9)

2 ^ 32约为42亿。这是具有32位(32位数字)的二进制数可以表示的最大VALUES数。

这些值可以是任何范围内的任何值。在UNSIGNED 32位数字中,有效值为0到2 ^ 32-1(而不是1到2 ^ 32,但是相同数量的VALUES,大约42亿)。

在SIGNED 32位数字中,32位中的一个用于指示该数字是否为负数。这会将值的数量减少2 ^ 1或减少一半。这留下了2 ^ 31,大约21亿。这意味着现在的范围约为-2亿至21亿。相同数量的值,不同的范围。

答案 3 :(得分:0)

您有2 ^ 31个零以下的值(最小值= -2 ^ 31),2 ^ 31-1值高于零且零本身。这使得2 ^ 31 + 2 ^ 31-1 + 1 = 2 * 2 ^ 31 = 2 ^ 32值:) ...

另一个解释涉及如何表示负数(使用二补码)的方式:很简单,最高有效位表示负数,所以你有2 ^ 31个正数(包括零),这给出了我们的范围是0..2 ^ 31-1