原码反码与补码(二进制数的编码表示)

Posted WINNER_QIUQIU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原码反码与补码(二进制数的编码表示)相关的知识,希望对你有一定的参考价值。

数值信息在计算机内采用二进制编码表示。在计算机中,数字的符号位一般用“0”表示正号,“1”表示负号,符号位放在数的最高位。
例如:8位二进制数:+1011011和-1011011在机器中分别表示为:01011011和11011011.

原码

将符号位数字化为0或1,可参照上述例子。
对于一个带符号的纯小数,它的原码就是把小数点左边一位作用符号位。例如:
X=0.1011,其对应的原码为: [ X ] 原 [X]_原 [X]=0.1011
X=-0.1011,其对应的原码为: [ X ] 原 [X]_原 [X]=1.1011
采用原码表示法时,编码简单直观,但存在下述问题:
1.零的表示不唯一。
2.用原码进行四则运算是,符号位需单独处理。

反码

反码是编码方式和求补码的中间码,其规则如下:
正数的反码与原码表示相同。
负数反码的符号位与原码相同,其余各位取反,例如:
X=+1100110, [ X ] 原 [X]_原 [X]=01100110, [ X ] 反 [X]_反 [X]=01100110
X=-1100110, [ X ] 原 [X]_原 [X]=11100110, [ X ] 反 [X]_反 [X]=10011001
X=+0000000, [ X ] 原 [X]_原 [X]=00000000, [ X ] 反 [X]_反 [X]=00000000
X=-0000000, [ X ] 原 [X]_原 [X]=10000000, [ X ] 反 [X]_反 [X]=11111111
和原码一样,反码中的零表示也不唯一。
对于纯小数:
X=0.1011, [ X ] 原 [X]_原 [X]=0.1011, [ X ] 反 [X]_反 [X]=0.1011
X=-0.1011, [ X ] 原 [X]_原 [X]=1.1011, [ X ] 反 [X]_反 [X]=1.0100

补码

如果有 n n n位整数,则它的模数为 2 n 2^n 2n;如果有 n n n位小数,小数点前一位为符号位,那么它的模数为2。
由以上规定得知,对于一个二进制负数,可用其模数与真值做加法求得其补码。例如:
X=-0110, [ X ] 补 [X]_补 [X]= 2 4 2^4 24+(-0110)=1010(可换算成十进制进行计算再换算回二进制)
X=-0.1011, [ X ] 补 [X]_补 [X]=2+(-0.1011)=1.0101
对于一个负数,其补码由该数反码的最末位加1求得。
对于正数来说,其原码、反码、补码形式相同。

以上是关于原码反码与补码(二进制数的编码表示)的主要内容,如果未能解决你的问题,请参考以下文章

动手动脑与原码反码补码

编码 原码 反码 补码

源码,反码以及补码

原码反码补码

原码补码反码

位运算符以及源码补码反码