原码 补码 反码
反码转换为原码:符号位不变,数值位分别“按位取反”
[x]真值= -1101001 = -105
[x]反码= 10010110
[x]原码= 11101001
原码转换为反码:符号位不变,数值位分别“按位取反”
[x]真值= -1101001 = -105
[x]原码= 11101001
[x]反码= 10010110
原码转换为补码:符号位不变,数值位按位取反,末位再加1
[x]原 = 10011010 原码为负数
11100101 符号位不变,其余各位变反
+ 1
[x]补 = 11100110
# 补码的补码就是原码
[x]补 = 01010110 不区分正负数
10101001 数值位按位取反
+ 1 末位加1
[-x]补 =10101010
正整数的原码反码补码一样;负整数的反码是除了原码符号位其他位全部取反,补码是反码加一
由于正数的原码、补码、反码表示方法均相同,不需转换,所以仅以负数情况分析。
已知原码,求补码。
例:已知某数X的原码为10110100,试求X的补码和反码。
解:由[X]原=10110100知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
1 0 1 1 0 1 0 0 原码
1 1 0 0 1 0 1 1 反码(符号位不变,数值位取反)
1 1 0 0 1 1 0 0 补码 (补码再加一)
故:X的补码=11001100,X的反码=11001101。
已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。
例:已知某数X的补码11101110,试求其原码。
解:由X的补码=11101110知,X为负数。
采用逆推法
1 1 1 0 1 1 1 0 补码
1 1 1 0 1 1 0 1 反码(末位减1)
1 0 0 1 0 0 1 0 原码(符号位不变,数值位取反)
补码加法
符号位相加后若有进位,则舍去该进位数字。
# 任意两数的补码之和等于该两数之和的补码.
[x]补+[y]补=[x+y]补
补码减法
# 两数差的补码等于两数补码之差
[x-y]补=[x]补-[y]补=[x]补+[-y]补