【发布时间】:2011-04-19 02:36:38
【问题描述】:
我知道 int32 的长度为 32 位(4 字节)。我假设它有 2³² 值,但由于其中一半必须低于零,我想这与此有关。 我想知道为什么 int32 有最大值。正数 2³¹ − 1.
【问题讨论】:
我知道 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 位数字)可以表示的最大 VALUES 数。
这些值可以是任何范围内的任何值。在一个 UNSIGNED 32 位数字中,有效值是从 0 到 2³² − 1(而不是 1 到 2³²,但 VALUES 的个数相同,约为 42 亿)。
在带符号的 32 位数字中,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
【讨论】: