计算机中二进制分为原码,补码,反码,运算及存储时都是按照补码进行的,可以将补码转回原码,再转十进制,就知道这个补码代表的十进制数是多少了。
在原码,反码,补码中,其中最高位为符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制表示。
如:
127的原码为0111 1111
-127的原码为1111 1111
其中
原码:二进制表示。二进制首位是符号位,0为正,1为负。
反码:正数,反码和原码一样;负数,符号位不变,其他各位取反。
补码:正数,补码和原码一样;负数,反码末位加1,有进位则进位,但不改变符号位(符号位不变很重要)。
例如,-7的补码:因为是负数,则符号位为“1”,整个为1000 0111;其余7位为-7的绝对值+7的原码
1000 0111按位取反为1111 1000;再加1,所以-7的补码是1111 1001。
补码转回原码的步骤为:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位不变,也就还是1,其余各位取反,然后再整个数加1。
例如:-7的补码是1111 1001 按位取反为1000 0110 再加1,所以-7的原码是1000 0111,和上面的例子对比是正确的。
得到原码后就可以按照如下的公式转换为十进制:
二进制转十进制(符号位不参与计算)
1.从左边第一位数乘以2的n-1次方(幂),n代表该数字从右到左数起的位数。加上从左边第二位数乘以2的n-2次方。
依此类推,一直到最后一个数。
例:-7的原码是1000 0111 对应的十进制是:1*2(3-1)次方+1*2(2-1)次方+1*2(1-1)次方=4+2+1=7 再加符号位则为 -7