原码.反码和补码

什么是原码?

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。

原码的优点:简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011

缺点:原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为130。显然出错了。 所以原码的符号位不能直接参与运算,必须和其他位分开,这就增加了硬件的开销和复杂性

具体定义还分小数和整数:

①小数原码的定义

[X] =

X 0≤X <1

1- X -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011

X=-0.1011 [X]原= 11011

②整数原码的定义

[X]原 =

X 0≤X <2n

2n-X - 2n < X ≤ 0

什么是反码?

正数的原码,补码,反码都相同,都等于它本身

负数的补码是:符号位为1,其余各位求反,末位加1

反码是:符号位为1,其余各位求反,但末位不加1

也就是说,反码末位加上1就是补码

1100110011 原

1011001100 反 除符号位,按位取反

1011001101 补 除符号位,按位取反再加1

正数的原反补是一样的

在计算机中,数据是以补码的形式存储的:

在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;

其余n-1位为数值位,各位的值可为0或1。

当真值为正时:原码、反码、补码数值位完全相同;

当真值为负时:

原码的数值位保持原样,

反码的数值位是原码数值位的各位取反,

补码则是反码的最低位加一。

注意符号位不变。

如:若机器数是16位:

十进制数 17 的原码、反码与补码均为: [**************]1

十进制数-17 的原码、反码与补码分别为:[**************]1、

[**************]0、[**************]1

什么是二进制补码?

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确.

? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10

?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题.

( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000) ?补码的加减运算如下:

( 1 )?10-? ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)补?+ (11111111)补?=? (00000000)补?= ( 0 )?正确

( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?补+ (11111110)?补=? (11111111)补?= ( -1 ) ?正确

?? 所以补码的设计目的是:

???? ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

? 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!

什么是原码?

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。

原码的优点:简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011

缺点:原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为130。显然出错了。 所以原码的符号位不能直接参与运算,必须和其他位分开,这就增加了硬件的开销和复杂性

具体定义还分小数和整数:

①小数原码的定义

[X] =

X 0≤X <1

1- X -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011

X=-0.1011 [X]原= 11011

②整数原码的定义

[X]原 =

X 0≤X <2n

2n-X - 2n < X ≤ 0

什么是反码?

正数的原码,补码,反码都相同,都等于它本身

负数的补码是:符号位为1,其余各位求反,末位加1

反码是:符号位为1,其余各位求反,但末位不加1

也就是说,反码末位加上1就是补码

1100110011 原

1011001100 反 除符号位,按位取反

1011001101 补 除符号位,按位取反再加1

正数的原反补是一样的

在计算机中,数据是以补码的形式存储的:

在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;

其余n-1位为数值位,各位的值可为0或1。

当真值为正时:原码、反码、补码数值位完全相同;

当真值为负时:

原码的数值位保持原样,

反码的数值位是原码数值位的各位取反,

补码则是反码的最低位加一。

注意符号位不变。

如:若机器数是16位:

十进制数 17 的原码、反码与补码均为: [**************]1

十进制数-17 的原码、反码与补码分别为:[**************]1、

[**************]0、[**************]1

什么是二进制补码?

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确.

? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10

?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题.

( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000) ?补码的加减运算如下:

( 1 )?10-? ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

(00000001)补?+ (11111111)补?=? (00000000)补?= ( 0 )?正确

( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

(00000001)?补+ (11111110)?补=? (11111111)补?= ( -1 ) ?正确

?? 所以补码的设计目的是:

???? ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

? 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!


相关内容

  • 原码反码补码移码
  • 概念介绍: 计算机中的信息都是以二进制形式表示的,数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为(-127~-0 + 0~127)共256个. 有了数值的表示方法就可以对数进行算术运算.但是 ...

  • 无符号型和有符号数
  • 理解有符号数和无符号数 2008-09-23 14:15 负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一 ...

  • 计算机原码反码补码
  • 在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,计算机只能识别0和1,使用的是二进制.计算机中就用一个数的最高位作为符号位,并用0表示正数,1表示负数.这样数的符号也可以用数字表示了.在计算机中,负数的二进制有3种表示方法:原码.反码和补码.任何正数的原码反码和补码形式完全相同, ...

  • 上机1 C语言的运行环境和运行过程
  • 上机一 C 语言的运行环境和运行过程 上机目的: 1. 掌握c 程序设计编程环境visual c++,掌握运行一个c 程序设计的基本步骤,包括编辑.编译.连接和运行. 2. 掌握c 语言程序设计的基本框架,能够编写简单的c 程序. 3. 了解程序调试的基本思想,能找出并改正c 程序中的语法错误. 上 ...

  • 负数的二进制表示方法
  • 一:表示法: 1.正数5的表示法 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0. 2.负数-5的表示法 现在想知道,- ...

  • 二进制数的原码.反码及补码表示
  • (注意:理解的彻底这里) 二进制数的原码.反码及补码表示 1.机器数与真值 机器数:数在机器中的编码表示. 真 值:一般书写表示的数. 机器数中,数值和符号完全数字化.计算机在进行数字运算时,采用把各种符号位和数字位一起编码的方法.常见的有原码.反码及补码表示法. 2.原码表示法 原码表示法是机器数 ...

  • 十进制转二进制
  • 十进制转二进制: 商余值:110 6/2 3 0 3/2 1 1 1/2 0 1 67 1000011 67/2 33 1 33/2 16 1 16/2 8 0 8/2 4 0 4/2 2 0 2/2 1 0 1/2 0 1 二进制转十进制: 110 1*2^1 +1*2^2 =6 1000011 ...

  • 减法运算电路图
  • 同加法运算一样,减法运算可采用减法器来实现.半减器和全减器的设计方法和步骤与设计加法器相同.实用上,为了简化系统结构 ,通常不另外设计减法器,而是将减法运算变为加法运算来处理,使运算器既能实现加法运算,又可实现减法运算.一般采用加补码的方法代替减法运算,下面先来介绍这种方法的原理. 1. 反码和补码 ...

  • 16进制_百度百科,全球最大中文百科全书
  • 16进制_百度百科,全球最大中文百科全书我的百科 我的贡献草稿箱百度首页 | 登录 新闻 网页 贴吧 知道 MP3 图片 视频 百科帮助 添加到搜藏 返回百度百科首页 编辑词条 16进制 16进制:用16作为基数的计数系统.用数字0-9和字母a-f(或其大写A-F)表示10到15. 十六进制数转换成 ...