我知道int32的长度为32位(4字节)。我假设它有2 ^ 32个值但是其中一半需要低于零,我猜它与此有关。 我想知道为什么int32具有最大值。正数2 ^ 31 -1。
答案 0 :(得分:38)
这个最重要的位用于编码符号(1表示负数),因此实际值只有31位可用。
Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111
1 = 00000000000000000000000000000001
0 = 00000000000000000000000000000000
-1 = 11111111111111111111111111111111
Int32.MinValue = -2^31 = 10000000000000000000000000000000
答案 1 :(得分:25)
答案 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