C# 为什么int32类型的最大值为2³¹−;1.
可能重复:C# 为什么int32类型的最大值为2³¹−;1.,c#,types,integer,C#,Types,Integer,可能重复: 我知道int32的长度为32位(4字节)。我假设它有2个值,但其中一半必须小于零,我想这与此有关。 我想知道为什么int32的最大正数为2− 1.2可能的值 − 2个用于 − 1用于零的值 =2‰− 1可用于正整数的值此最高有效位用于对符号进行编码(1表示负),因此只有31位可用于实际值 Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111 1 = 0000000
我知道int32的长度为32位(4字节)。我假设它有2个值,但其中一半必须小于零,我想这与此有关。 我想知道为什么int32的最大正数为2− 1.2可能的值 − 2个用于 − 1用于零的值
=2‰− 1可用于正整数的值此最高有效位用于对符号进行编码(1表示负),因此只有31位可用于实际值
Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111
1 = 00000000000000000000000000000001
0 = 00000000000000000000000000000000
-1 = 11111111111111111111111111111111
Int32.MinValue = -2^31 = 10000000000000000000000000000000
在零以下有2^31个值(最小值=-2^31),在零以上有2^31-1个值以及零本身。这使得2^31+2^31-1+1=2*2^31=2^32的值:)
另一种解释涉及负数的表示方式(使用两个补码):很快,最高有效位表示负数,因此剩下2^31个正数(包括零),这给了我们范围0..2^31-12²约为42亿。这是32位二进制数(32位数字)可以表示的最大值数 这些值可以是任何范围内的任何值。在无符号32位数字中,有效值为0到2− 1(不是1到2,而是相同数量的值,大约42亿)
在有符号32位数字中,32位中的一位用于指示数字是否为负数。这将使值的数量减少了1/2,或减少了一半。剩下2亿欧元,约为21亿欧元。这意味着范围现在约为−21亿到21亿。相同的数值,不同的范围。重复这是一个被高度低估的答案,应该是最乐观的。如果我们要考虑0作为正数(假设),那么除了1到0之间的虚线,我们还有相等的数值。