-128的8位补码是:1000 0000B,换算成十进制就是 128。
负数的补码,是用“模”计算出来的,即:
[X]补 = 256 - |X| = 256- |-128| = 128。
不要用“求反加一”来算,那只不过是一个经验公式而已。
这是一个非常特殊的带符号位二进制编码数,表示的是十进制的-128;
补码:1000 0000;
反码:补码减1,1000 0000-1=1111 1111(低位向高位逐次借1,符号位保持不变);
原码:反码取反,符号位保持不变,可推出原码为1000 0000;
从上面的推导中我们发现了一个很有趣,很有意思的现象,那就是这个负数的补码和原码居然是一样的,都是1000 0000,从原码最“原始”的理解,这个数“应该”是表示十进制的-0,那么问题出来了,8位带符号位的二进制编码数0000 0000也表示十进制的0(-0也是0),那岂不是有两个8位二进制编码数都表示十进制的0吗?有冲突了!为了解决这一问题,计算机编码领域统一明文规定,这个补码表示十进制纯数学结果128的负数,也就是-128,以避免出现-0的情况
严格来说在数学上,-128应该表示成-10000000(7个0),但是由于在计算机中每一位的信息只有两种,既高低电位,在逻辑上用0和1来表示,所以为了表示正负数,就规定在从左往右的第一位表示数的符号,0是正,是负,而后面的部分才是数值部分
用128反复除以2取余数,再从下往上把余数写出来就行了。比如128除以2得64,余数是0,就是问号前的第一个0,再把64除以2得32,余数是0就是问号前的第二个0,就这样就出来了。 最前面那个1表示“-”号。