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-1

2²约为42亿。这是32位二进制数(32位数字)可以表示的最大值数

这些值可以是任何范围内的任何值。在无符号32位数字中,有效值为0到2− 1(不是1到2,而是相同数量的值,大约42亿)


在有符号32位数字中,32位中的一位用于指示数字是否为负数。这将使值的数量减少了1/2,或减少了一半。剩下2亿欧元,约为21亿欧元。这意味着范围现在约为−21亿到21亿。相同的数值,不同的范围。

重复这是一个被高度低估的答案,应该是最乐观的。如果我们要考虑0作为正数(假设),那么除了1到0之间的虚线,我们还有相等的数值。