为什么一个字节可以表示的有符号整数的范围是-128~+127?

为什么是-127~128?

  对于一个字节来说,能够表示的整数为什么不是-127~+127,也不是-127~+128,而是-128~+127

  对于有符号整数的表示和具体的编程语言无关,而是由硬件决定的,我们能想到的最简单的方法就是用其中一位表示符号,剩余七位用来表示数据位。

 

  但这种方法有一个缺陷,就是会有+0和-0两个0,能够表示的数据只有-127~+127,同时使用两个位组合表示同一个数字有些浪费,补码很好的解决了这一问题。

  首先,对于正数的表示方法,与上述方法相同,但对于负数,首先符号位置为1,表示负。剩余7位数据位的表示方法和上述有很大不同。

  从一个9位组合10000000(无符号2进制)中减去一个负数的位组合,就是该负数值的数量。

  

  同理,-127可以表示为10000001:

   至此已经可以解释为什么一个字节可以表示的有符号数范围是-128~+127了。

 

  同时,如果要对二进制补码取反,只需要对其每一位取反再加一即可,例如,1是10000000,所以-1是11111110+1,即11111111,和前面所看到的是一样的。