当前位置:首页 > 原码补码反码的辨析
原码、反码、补码
一、原码
(1) 原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位 [+7]原= 0 0000111 B [-7]原= 1 0000111 B
注意:
a. 数0的原码有两种形式:
[+0]原=00000000B [-0]原=10000000B
b. 8位二进制原码的表示范围:-127~+127
二、反码
(2)正数:正数的反码与原码相同。
负数:负数的反码,符号位在正数基础上为“1”,数值部
分按位取反。(也就是在其绝对值正数的基础上取反)
例如: 符号位 数值位 [+7]反= 0 0000111 B [-7]反= 1 1111000 B 注意:a. 数0的反码也有两种形式,即 [+0]反=00000000B
[- 0]反=11111111B
b. 8位二进制反码的表示范围:-127~+127
三、补码
(3)正数:正数的补码和原码相同。
负数:负数的补码则是符号位在正数基础上为“1”。并且,
这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位 [+7]补= 0 0000111 B [-7]补= 1 1111001 B 请注意:
a.正数的补码即是它所表示的数的真值,而负数的补码的数
值部分却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。
b.与原码、反码不同,数值0的补码只有一个,即
[0]补=00000000B。(补数运算时,比原来多出的位忽略) c.若字长为8位,则补码所表示的范围为-128~+127;应注意所得结果不应超过补码所能表示数的范围。
四、原码、反码、补码之间的转换
由于正数的原码、补码、反码表示方法均相同,不需转换。 在此,仅以负数情况分析。 (1) 已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码。 解:由[X]原=10110100B知,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]补=11001100B,[X]反=11001011B。 (2) 已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 的方法。 例:已知某数X的补码11101110B,试求其原码。 解:由[X]补=11101110B知,X为负数。 采用逆推法
1 1 1 0 1 1 1 0 补码
1 0 0 1 0 0 1 0 反码(符号位不变,数值位取反加1)
1 1 1 0 1 1 0 1 原码(符号位不变,数值位取反)
(3)总结 1.原码的求法:
(1)对于正数,转化为二进制数,在最前面添加一符号位(这是规
定的),用1表示负数,0表示正数.如:0000 0000是一个字节,其中0为符号位,表示是正数,其它七位表示二进制的值.正数的原码、反码、补码是同一个数!
(2)对于负数,转化为二进制数,前面符号位为1表示是负数. 计算原码只要在转化的二进制数前面加上相应的符号位就
行了.
2.反码的求法:对于负数,将原码各位取反,符号位不变. 3.补码的求法:对于负数,将反码加上二进制的1即可,也就是反码在最后一位上加上1就是补码了.
共分享92篇相关文档