因为计算机内表示数值使用的是补码,而不是原码,所以你才有这样的疑问。
下面我简单解释一下你就明白了。
原码就是这个数本身的二进制形式。
以8位二进制为例 0000001 就是+1 1000001 就是-1 补码分为两种情况:正数的补码与原码一样;2、负数的补码是符号位保持不变,其余各位取反,再加1。
反码就是负数符号位不变,其余各位取反,正数反码与原码相同。
以四位二进制为例,其原码、反码、补码为: 真值原码反码补码 7011101110111 6011001100110 5010101010101 4010001000100 3001100110011 2001000100010 1000100010001 0000000000000 -0100011110000 -1100111101111 -2101011011110 -3101111001101 -4110010111100 -5110110101011 -6111010011010 -7111110001001 为什么要设立补码呢? 第一是为了能让计算机执行减法:[a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000 16位二进制原码表示的负数是 -0~-32767,包括-0加起来是32768个数;因为补码加了1,所以补码的表示范围是 -1~-32768,也是32768个数。
n位补码能表示的范围的公式是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个。