为什么是unsigned int的最大值 - >在C ++中2 ^ n - 1

时间:2017-10-13 04:44:58

标签: c++ c++11

如果我有一个4字节unsigned int,我的空格为2^32

最大值应该是4294967296(2 ^ 32),那么为什么它是4294967295(2 ^ 32-1)呢?

4 个答案:

答案 0 :(得分:3)

这只是一个基本的数学。看看这个例子:

如果你有一个1位长整数,那么最大值是多少?

根据你说的,它应该是2 ^ 1 = 2.你怎么会只用一位重复一个值2?

答案 1 :(得分:0)

2 ^ 1占2位。 2 ^ 32占33位。

但你只有32位。所以2 ^ 32 - 1

答案 2 :(得分:0)

基础数学。

一位可以表示2值。一组n位可以表示2^n(使用^作为符号来表示“对于幂的幂”,而不是像C ++中的默认含义那样的按位运算)。

unsigned整数类型的变量表示包含0与该类型可表示的最大值之间的每个连续整数值的序列。如果连续值的总数为2^n,并且其中第一个为零,则该类型可以表示2^n - 1个连续的正(非零)值。因此,最大值必须为2^n - 1

答案 3 :(得分:0)

因为计数从0开始。 对于2位整数,您可以有4个不同的值。 (0,1,2,3),即0至2 ^ 2 - 1。

(00,01,10,11)

类似地,对于32位整数,您可以将最大值设置为2 ^ 32 - 1。