我想知道为什么.NET中Int32的最大值是2147483647而不是2147483648。因为2³¹ = 2147483648。
谢谢
Int32
存储在32位中,而不是31位,并且它的一半范围被负数占据。在剩余的范围内,你会失去一个值变成0,留下2147483647作为最大的正数。
Int32
的范围为-2147483648到2147483647。
2^8
或256个值。我们将其中一半(2^7
或128)放在零的负面,零占一个,另一半从零开始。由于零占了一个,我们剩下2^7-1
个正数,即127个。这可以扩展到32位,其中我们得到2^31-1
个正数。其他数字表示法也可以有-0和+0。 - TheEvilPenguin这个范围包括正数和零0
,因此范围是从0
到2147483647
,由于零被视为正数,因此向负数方向的范围从“-1”到-2147483648
。
因此,总体上,正面和负面采取相同数量的值。
Int32的实际数据存储在31位中,因为普通的Int32也应该包含负数,1位用作符号位,剩下的31位用作数据。然而,如果您使用无符号的Int32,则将在其中拥有完整的32位数据。
这意味着int
从0
到2147483647
可以有最大2147483648
个正值,而int.Min
是-2,147,483,648,因为它不包括0
.
sbyte
范围为-128到127的原因相同。请花点时间考虑这个例子,因为考虑小数字会更容易。想想在范围[-128, 127]
内有多少不同的数字被表示... - Jon Skeet