多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。把十进制数转换成二进制数后,二进制数就是原码

例如:十进制: ----->二进制:10“二进制:10“就是原码。

中文名

反码

外文名

Inverse code

所属领域

计算机

作 用

存储数值

附 加

多数计算机不采用反码表示数值

概述

在计算机内,有符号数有3种表示法:原码、反码和补码。几种表示法关系密不可分。

原码

反码

原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。为了方便整数和小数区别,整数的符号位与数值位之间用“,”隔开,小数的符号位与数值位之间用“.”隔开。

根据2个定义可以看出,原码的整数和小数中“0”的表示形式各有2种,“+0”和“-0”不一样,以8位机器数为例,整数的“+0”原码为0,0000000;整数的“-0”原码为1,0000000;小数的“+0”原码为0.0000000,小数的“-0”原码为1.0000000。满足条件的数,带入定义里面计算机,主要机器数位,直接计算得到。

反码

反码通常是用来由原码求补码或者由补码求原码的过渡码。整数的反码定义如图1中图3整数反码定义,小数的定义如图1中图4小数反码定义。根据定义,可以得到机器数的反码的整数和小数中“0”的表示形式各有2种,“+0”和“-0”不一样,以8位机器数为例,整数的“+0”原码为0,0000000,反码为0,0000000;整数的“-0”原码为1,0000000,反码为1,1111111;小数的“+0”原码为0.0000000,反码为0.0000000;小数的“-0”原码为1.0000000,小数的“-0”反码为1.1111111。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。

补码

补码是计算机把减法运算转化为加法运算的关键编码,整数的补码码定义如图2中图5整数补码定义,小数的定义如图2中图6小数补码码定义。如何利用先进的科学技术,开发一款能够对功能各异的外部设备进行集中管理,并接受上层统一控制的嵌入式通信控制器,成了当前特种车辆制造中的关键问题。[1]

根据2个定义可以看出,补码的整数和小数中“0”的表示形式各只有1种,“+0”和“-0”一样,以8位机器数为例,整数的“+0”和“-0”补码为0,0000000;小数的“+0”和“-0”补码为0.0000000。因为根据定义x为“-0”,以8位机器数为例,为负数求补码,根据公式得2^8+(-0),即100000000+(-0),机器数位8位,所以为00000000,跟“+0”得到的补码一样。1,0000000补码,表示的数位-128。补码有下面2个性质,根据这2个性质可以把减法转化为加法来看。

移码

计算机中如何判断一个数是否为“机器零”有两条件,分别为当浮点数尾数为0时,不论其阶码为何值按机器零处理;另外,当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理。阶码都是整数,为了机器好判断设置了移码。移码的定义

以阶码为5位,尾数为11位的浮点数为例。当阶码和尾数都用补码表示时,机器零为×,××××;0.00000000000或者1,0000;×.××××××××××阶码用补码表示;如果阶码用移码表示,则为0,0000;×.××××××××××;全为机器零;即0,0000;0.0000000000,无论是阶码或者尾数全为“0”时,该数位机器零;有利于机器中“判0”电路的实现。

详细释义

所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:

正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1.对于二进制原码10010求反码:

((10010)原)反=对正数(00010)原含符号位取反=反码11101 10010,1为符号码,故为负)

(11101)二进制=-2十进制

对于八进制:

举例某linux平台设置了默认的目录权限为755(rwxr-xr-x),八进制表示为0755,那么,umask是权限位755的反码,计算得到umask为0022的过程如下:

原码0755=反码0022(逐位解释:0为符号位,0为7-7,2为7-5,2为7-5)

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

转换

由于正数的原码、补码、反码表示方法均相同,不需转换。

反码

在此,仅以负数情况分析。

(1)已知原码,求补码。

例:已知某数X的原码为10110100B,试求X的补码和反码。

解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。

1011 100原码

11001011反码,符号位不变,数值位取反,即其补码为11001011+1=11001100

11001100补码

故:[X]补=11001100B,[X]反=11001011B。

(2)已知补码,求原码。

分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法。

例:已知某数X的补码11101110B,试求其原码。

解:由[X]补=11101110B知,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原码(符号位不变,数值位取反)