为什么无符号n位整数的最大值为2 ^ n-1而不是2 ^ n?

Ugd*_*han 27 integer programming-languages numeric-limits

n-bit整数的最大值是2 n -1.为什么我们有"减1"?为什么最大只有2 n

ten*_*our 66

-1是因为整数从0开始,但我们的计数从1开始.

因此,2^32-1是32位无符号整数(32位二进制数字)的最大值.2^32可能值数量.

为简化原因,请查看十进制.10^2-1是2位十进制数的最大值(99).因为我们直观的人类计数从1开始,但整数是从0开始的,10^2是值的数量(100).


Mar*_*ahn 25

2^32 在二进制:

1 00000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

2^32 - 1 在二进制:

11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)

如您所见,2^3233位,而是位整数2^32 - 1的最大值32.

这里看似"一个一个"错误的原因是最低位代表一个而不是两个.所以一位实际上2^0第二2^1,等等......


Ted*_*opp 12

2 32二进制是一个后跟32个零,总共33位.这不适合32位的int值.


Vic*_*ata 8

在大多数编程语言,0是一个数字.

  • 还有数学:-) (7认同)

Geo*_*dis 5

从0到N的数字不是N.它们是N + 1.这对大多数人来说并不明显,因此很多程序都有错误,因为如果这个原因.