一个数的原码,反码,补码??

上传人:飞*** 文档编号:47696378 上传时间:2018-07-04 格式:PDF 页数:7 大小:70.03KB
返回 下载 相关 举报
一个数的原码,反码,补码??_第1页
第1页 / 共7页
一个数的原码,反码,补码??_第2页
第2页 / 共7页
一个数的原码,反码,补码??_第3页
第3页 / 共7页
一个数的原码,反码,补码??_第4页
第4页 / 共7页
一个数的原码,反码,补码??_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《一个数的原码,反码,补码??》由会员分享,可在线阅读,更多相关《一个数的原码,反码,补码??(7页珍藏版)》请在金锄头文库上搜索。

1、基本概念在计算机内部表示二进制数的方法称为数值编码,把一个数及其符号在机器中的表示加以数值化,称为机器数。机器数所代表的数称为数的真值。表示一个机器数,应考虑以下三个因素:1机器数的范围字长为 8 位,无符号整数的最大值是(11111111 )B=(255 )D,此时机器数的范围是0255 。字长为 16 位,无符号整数的最大值是( 1111111111111111) B=(FFFF ) H=(65535 ) D 此时机器数的范围是065535 。2机器数的符号在算术运算中,数据是有正有负的,将这类数据称为带符号数。为了在计算机中正确地表示带符号数,通常规定每个字长的最高位为符号位,并用0 表

2、示正数,用1 表示负数。3机器数中小数点的位置在机器中,小数点的位置通常有两种约定:一种规定小数点的位置固定不变,这时的机器数称为“ 定点数 ” 。另一种规定小数点的位置可以浮动,这时的机器数称为“ 浮点数 ” 。4原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。【例 1】当机器字长为8 位二进制数时:X 1011011 X原码 01011011 Y 1011011 Y 原码 11011011 1原码 00000001 1原码 10000001 127 原码 01111111 127 原码 11111111 原码表示的整数范围是

3、:( 2n-11)( 2n-1 1),其中n 为机器字长。则: 8 位二进制原码表示的整数范围是127 127 16 位二进制原码表示的整数范围是32767 32767 5反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。【例2.14 】当机器字长为8 位二进制数时:X 1011011 X原码 01011011 X反码 01011011 Y 1011011 Y原码 11011011 Y反码 10100100 1反码 00000001 1反码 11111110 127 反码 01111111 127 反码 10000000 负数的反码与负数的原码有

4、很大的区别,反码通常用作求补码过程中的中间形式。反码表示的整数范围与原码相同。6补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。【例 2】( 1)X 1011011 ( 2) Y 1011011 ( 1)根据定义有:X原码 01011011 X补码 01011011 ( 2) 根据定义有:Y原码 11011011 Y反码 10100100 Y补码 10100101 补码表示的整数范围是2n-1 ( 2n-1 1),其中n 为机器字长。则: 8 位二进制补码表示的整数范围是128 127 16 位二进制补码表示的整数范围是32768 32767 当运算结果超出这个范围时,就不能正确表

5、示数了,此时称为溢出。7补码与真值之间的转换正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加 1,即可得到该负数补码对应的真值的绝对值。【例 3】X补码 01011001B ,X补码 11011001B ,分别求其真值X。( 1)X补码代表的数是正数,其真值:X 1011001B (1 261 241 231 20)( 641681)( 89)D ( 2)X补码代表的数是负数,则真值:X( 1011001 求反 1)B ( 0100110 1)B ( 0100111 )B ( 1 251 22 1 211 20)( 32421)( 39)D 数值在计算机中表示形

6、式为机器数,计算机只能识别0 和 1,使用的是二进制,而在日常生活中人们使用的是十进制,“正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10 个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10 进制 )的实践要比二或三进制计数出现的晚.“(摘自 有空大家可以看看哦,很有意思的 ).为了能方便的与二进制转换,就使用了十六进制(2 4) 和八进制 (23). 下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0 为正 ,1 为负 ).这就是机器数的原码了.假设机器能处理的位数为8.即字长为 1byte, 原码能表示数值的范围为(-127-

7、0 +0127)共 256 个. 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下 : 假设字长为8bits ( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001) 原 + (10000001) 原 = (10000010) 原 = ( -2 ) 显然不正确 . 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: (

8、 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)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码

9、概念. 负数的补码就是对反码加一,而正数不变 ,正数的原码反码补码是一样的 .在补码中用 (-128) 代替了 (-0),所以补码的表示范围为: (-1280127) 共 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 (

10、00000001) 补+ (11111110) 补= (11111111) 补 = ( -1 ) 正确所以补码的设计目的是: 使符号位能与有效值部分一起参加运算,从而简化运算规则. 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C 等其他高级语言中使用的都是原码。原码就是这个数本身的二进制形式。例如0000001 就是 +1 1000001 就是 -1 正数的反码和补码都是和原码相同。负数的反码是将其原码除符号位之外的各位求反-3反=10000011 反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在

11、末位再加1。-3补=10000011 补=11111101 一个数和它的补码是可逆的。为什么要设立补码呢?第一是为了能让计算机执行减法:a-b 补=a 补 +(-b)补第二个原因是为了统一正0 和负 0 正零: 00000000 负零: 10000000 这两个数其实都是0,但他们的原码却有不同的表示。但是他们的补码是一样的,都是00000000 特别注意,如果+1 之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)10000000 补=10000000 反+1 =11111111+1 =(1)00000000 =00000000( 最高位溢出了,符号位变成了0)有人会问1000

12、0000这个补码表示的哪个数的补码呢?其实这是一个规定,这个数表示的是-128 所以 n 位补码能表示的范围是-2(n-1) 到 2(n-1)-1 比 n 位原码能表示的数多一个又例:1011 原码: 01011 反码: 01011 / 正数时,反码原码补码: 01011 / 正数时,补码原码-1011 原码: 11011 反码: 10100 / 负数时,反码为原码取反补码: 10101 / 负数时,补码为原码取反1 01101 原码: 0.1101 反码: 0.1101 / 正数时,反码原码补码: 0.1101 / 正数时,补码原码-01101 原码: 1.1101 反码: 1.0010 /

13、 负数时,反码为原码取反补码: 1.0011 / 负数时,补码为原码取反1 总结:在计算机内,定点数有3 种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正, “1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。例如:符号位数值位+7原= 0 0000111 B -7原= 1 0000111 B 注意: a. 数 0 的原码有两种形式:

14、+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)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12 进制进行计数循环的,即以 12 为模。在时钟上,时针加上(正拨)12

15、的整数位或减去(反拨)12 的整数位,时针的位置不变。14 点钟在舍去模12 后,成为(下午)2 点钟( 14=14-12=2 )。从 0 点出发逆时针拨10 格即减去10 小时,也可看成从0 点出发顺时针拨2 格(加上2 小时),即2 点( 0-10=-10=-10+12=2)。因此,在模12 的前提下, -10 可映射为 +2。由此可见,对于一个模数为12 的循环系统来说,加 2 和减 10 的效果是一样的;因此,在以 12 为模的系统中,凡是减10 的运算都可以用加2 来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10 和 2 对模12 而言互为补数。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8 位也就是256 个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8 位二进制数,它的模数为28=256 。在计算中,两个互补的数称为 “ 补码 ” 。2)补码的表示:正数:正数的补码和原码相同。负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是 “ 反码 +1” 。例如:符号位数值位+7补= 0 0000111 B -7补= 1 1111001

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号