如果我有一个4字节unsigned int
,我的空格为2^32
。
最大值应该是4294967296(2 ^ 32),那么为什么它是4294967295(2 ^ 32-1)呢?
答案 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。