跳转到内容

反码转换为原码:符号位不变,数值位分别“按位取反”

c
[x]真值= -1101001 = -105
[x]反码= 10010110
[x]原码= 11101001

原码转换为反码:符号位不变,数值位分别“按位取反”

c
[x]真值= -1101001 = -105
[x]原码= 11101001
[x]反码= 10010110

原码转换为补码:符号位不变,数值位按位取反,末位再加1

c
[x]原 = 10011010 原码为负数
        11100101 符号位不变,其余各位变反
      +        1 
[x]补 = 11100110
c
# 补码的补码就是原码
[x]补 = 01010110  不区分正负数
        10101001  数值位按位取反
      +        1  末位加1
[-x]补 =10101010

正整数的原码反码补码一样;负整数的反码是除了原码符号位其他位全部取反,补码是反码加一
由于正数的原码、补码、反码表示方法均相同,不需转换,所以仅以负数情况分析。

c
已知原码,求补码。
例:已知某数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
c
已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减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 原码(符号位不变,数值位取反)

补码加法

符号位相加后若有进位,则舍去该进位数字。

c
# 任意两数的补码之和等于该两数之和的补码.

[x]补+[y]补=[x+y]补

补码减法

c
# 两数差的补码等于两数补码之差
[x-y]补=[x]补-[y]补=[x]补+[-y]补

Released under the MIT License.