----关于分析数据类型的表示范围
csapp 第二版 32页这个图让我们如何对一个类型进行数据分析给予了一点启示
char是被分配一个字节的,一个字节八位(8bits),没有说明是无符号的所以就认为是有符号的,根据补码规则,正数最大值为2的七次方减一等于127(因为第一位权重为2的七次方但是为了表示正数设为0)而负数的最小值为2的七次方(因为第一位权重为2的七次方,而且为了表示负数设为1)。
在这里我们可以观察到一个特点:数据类型的表示范围并不是对称的,而且很明显最大值+1=最小值的绝对值。(这个直接看或许会没有头绪,但是结合着补码的表示规则就可以很轻易的理解了。)
当然了书上除了上面一种解释,还给了一种解释,以8位表示为例,那就是当符号为1,表示复数的时候,剩下的7个位无论取1还是取0,都可以表示一个复数,那么也就是有着2的七次方等于128种可能,而当符号位为0表示正数的时候,剩下的7个位有128中可能,但是要排除一种可能,那么就是0,所以只能表示128-1=127个正数。(这样子详细的讲可能会好懂一些,原谅我的笨拙hh)
unsigned char就明显的说明了这是无符号类型的,所以说并没有符号位的概念,表示的最小数值当然就是所有位置为0,最大的当然是所有位置1,并不需要计算
2的七次方 + 2的六次方 +……2的零次方,