计算机中一个字节是8个二进制位00000000,如果要表示有符号数值则最左侧位为符号位,1表示负数、0表示正数。在计算机中数据的存储形式是补码形式,正数的补码是自己本身,负数的补码是,负数绝对值的二进制码安位取反后+1
这样一来,正数就能表示 2^7个 即 127 ~ 0 之间的数,负数则能表示 - 2^7个 即 -127 ~ 0 之间的数字。这就对于0的存储出现了重复, “+0” 即00000000 和 “-0” 即10000000。
那么到底是保留 “+0” 还是 保留 “-0” 呢?去除掉的那个“0”又表示什么数呢?首先,当前一个字节已经可以保存 127 ~ -127 (0重复) 即255个数。对于额外保存的数,我们当然是希望保存这个范围之外的数,并且最好“接壤” 127 ~ -127这个范围,那么优先考虑 128 和 -128。我们知道,字节的存储其实是使用补码来表示的,-127的补码是 10000001,这个数字 减1 刚好是 “-0” 10000000,-127 减1 等于 -128,所以这里将 “-0” 10000000 表示 -128 最合适。