我知道Int32
的长度为32位(4个字节)。我猜它有2³²个值,但由于其中一半必须为负数,所以我认为这与此有关。
我想知道为什么Int32
的最大正数是2³¹-1。
最高位用于表示符号(1表示负数),因此只剩下31位来表示实际的值。
Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111
1 = 00000000000000000000000000000001
0 = 00000000000000000000000000000000
-1 = 11111111111111111111111111111111
Int32.MinValue = -2^31 = 10000000000000000000000000000000
2³²约为42亿。这是一个由32位数字(即一个32位二进制数)表示的数的最大值。
这些值可以是任何范围内的任何值。在无符号32位数字中,有效值的范围是从0到2³²-1(而不是从1到2³²,但是值的数量相同,约为42亿)。
在有符号32位数字中,其中一位用于指示数字是否为负数。这将使值的数量减少2¹倍,或减半。这意味着现在只有2³¹个值,约为21亿。这意味着范围现在约为-21亿到21亿。值的数量相同,范围不同。
在编程中,你有2^31个零以下的值(最小值为-2^31),2^31-1个零以上的值和零本身。这使得2^31 + 2^31-1 + 1 = 2*2^31 = 2^32个值 :) ...
另一个解释涉及负数如何表示(使用二进制补码):简而言之,最高有效位表示负数,因此你还剩下2^31个正数(包括零),这给我们带来了范围0..2^31-1。