为什么int32的最大值为2 ^ 31 -1

Pet*_*etr 10 c# types integer

可能重复:
什么是"2的补充"?

我知道int32的长度为32位(4字节).我假设它有2 ^ 32个值,但是其中一半需要低于零,我猜它与此有关.我想知道为什么int32具有最大值.正数2 ^ 31 -1.

Tho*_*que 41

这个最高有效位用于编码符号(1表示负数),因此实际值只有31位可用.

Int32.MaxValue =  2^31 - 1 = 01111111111111111111111111111111
                  1        = 00000000000000000000000000000001
                  0        = 00000000000000000000000000000000
                 -1        = 11111111111111111111111111111111
Int32.MinValue = -2^31     = 10000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)


dan*_*n04 26

2 ^ 32个可能的值

- 2 ^ 31个值用于负整数

- 1用于零的值

= 2 ^ 31-1值可用于正整数


Phi*_*ore 13

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亿.相同数量的值,不同的范围.