案例1:
求~2=?
解决方法:
1.先求~2的反码:
原码为:00000000 00000000 00000000 00000010
因为正数的原码=反码=补码
所以,~2的补码=00000000 00000000 00000000 00000010
然后求反得:
11111111 111111111 11111111 11111101
由结果可以指到这是一个负数,
因为负数的补码=反码+1;所以,
负数的反码=负数的补码-1;
11111111 111111111 11111111 11111100
因为负数的反码等于负数的原码符号位不变,其他位取反。
所以负数的原码等于 负数的反码符号位不变,其他位取反。
1000000 000000000 00000000 00000011
所以结果为 -3
案例2:
求~-5=?
求补码:
原码=100000000 00000000 00000000 00000101
反码=111111111 1111111 11111111 111111010
补码= 111111111 11111111 1111111 111111011
取反得:
000000000 00000000 000000000 00000000100
因为由符号位可得这是一个正数。
所以他的补码对应的原码是一样的。
所以结果为4.
计算总结:
原码的求法:
1、将数值部分转为二进制;
2、用”0”代替符号”+”;用”1”代替符号”-”,并且将符号位放在最高位;
3、假如符号位和二进制数组成达不到8位,我们将在中间加0,补足八位
举例:[+35]原码=00100011
反码的求法:
(1)正数的时候; 反码=原码; (2)负数的时候; 反码由原码转变而来,符号位不变,其余各位取反(即0、1互换)
举例:
[+35]反码=[+35]原码=00100011;
[-35]反码=11011100;
补码的求法:
情况一:正数
补码=反码=原码;
情况二:负数 补码=反码+1;
举例:
[+35]补码=[+35]反码=[+35]原码=00100011;
[-35]补码=[-35]反码+1=11011100+1=11011101