我们知道,对于有符号类型,计算机在处理的时候会把最高位当做符号位,0表示正数,1表示负数。举例来说(以下举例均针对8位有符号数):
0000 0001即为1,1000 0001即为-1,那么很容易得到8位有符号数值的表示范围应该是1111 1111 ~ 0111 1111,也就是-127~127,问题来了,-128是怎么来的呢?
在说明这个问题之前,先来补充点额外的知识:
在计算机的存储和计算中,统一的是采用补码进行处理和运算的,在弄清楚采用补码的好处之前,我们需要明确如下三个概念:
原码:是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码等于其反码+1。
很明显,文章开头的举例即是原码