




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、原码,反码,补码及运算一、定义1原码正数的符号位为 0,负数的符号位为 1,其它位按照一般的方法来表示数的绝对值。用这 样的表示方法得到的就是数的原码。X原码=01011011Y原码=110110111原码=10000001127原码=11111111【例 2.13】当机器字长为 8 位二进制数时:X = + 1011011Y = -1011011+ 1原码=00000001+ 127原码=01111111原码表示的整数范围是:(2n-1 1) ( 2n-1 1),其中n为机器子长。则:8位二进制原码表示的整数范围是 127+12716 位二进制原码表示的整数范围是 32767+ 327672
2、反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以 外的各位按位取反。【例 2.14】当机器字长为 8位二进制数时:X = + 1011011 X原码=01011011 X反码=01011011Y = 1011011 Y原码=11011011Y反码=10100100+ 1反码=00000001 1反码=11111110+ 127 反码=01111111 127反码=10000000负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式 反码表示的整数范围与原码相同。3补码 正数的补码与其原码相同,负数的补码为其反码在最低位加1。引入补码以后,计算机
3、中的加减运算都可以统一化为补码的加法运算,其符号位也参与 运算。【例2.15】(1) X =( 1 )根据定义有:+ 1011011 (2) Y = 1011011X原码=01011011X补码=01011011( 2) 根据定义有:Y原码=11011011Y反码=10100100Y补码=10100101补码表示的整数范围是 2n-1+( 2n-1 1 ),其中 n 为机器字长。则:8位二进制补码表示的整数范围是 128+127(-128 表示为 10000000,无对应的 原码和反码)16 位二进制补码表示的整数范围是 32768+ 32767 当运算结果超出这个范围时,就不能正确表示数了,
4、此时称为溢出。所以补码的设计目的是 使符号位能与有效值部分一起参加运算 ,从而简化运算规则使减法运算转换为加法运算 ,进一步简化计算机中运算器的线路设计4补码与真值之间的转换 正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末 位加 1,即可得到该负数补码对应的真值的绝对值。【例2.16】X补码=01011001B, X补码=11011001B,分别求其真值X1) X 补码代表的数是正数,其真值:X = + 1011001B=+ (1 X 26+ 1 X 24+ 1 X 23+ 1 X 20)=+( 64+ 16+ 8+ 1)=+( 89) D2) X 补码代表的数是
5、负数,则真值:X = ( 1011001求反+ 1) B=(0100110+ 1) B=(0100111) B=(1X 25+ 1 X 22+ 1X 21 + 1 X 20)=(32 + 4+ 2+ 1)=(39) D二、补码加、减运算规则1 、运算规则X + Y补=X补+ Y补X Y补=X补+ Y补若已知丫补,求Y补的方法是:将Y补的各位(包括符号位)逐位取反再在最低位加1即可。例如: 丫补= 101101 丫补= 010011 2、溢出判断,一般用双符号位进行判断:符号位 00 表示正数 11 表示负数结果的符号位为 01 时,称为上溢;为 10时,称为下溢 例题:设x=0.1101,y=
6、 0.0111,符号位为双符号位用补码求 x+y, x yx补 +y补=00 1101+11 100 仁00 0110x y补=x补+ y补=00 1101+00 011 仁01 0100结果错误,正溢出 数值在计算机中表示形式为机器数 ,计算机只能识别 0和1,使用的是二进制 ,而在日常生活中人 们使用的是十进制 .数值有正负之分 ,计算机就用一个数的最高位存放符号 (0 为正,1 为负).这就是机器数的原码了 假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为(-127-0 +0127)共 256 个.有了数值的表示方法就可以对数进行算术运算 .但是很快就发现用带符号位的
7、原码进行乘除 运算时结果正确 ,而在加减运算的时候就出现了问题 ,如下: 假设字长为 8bits( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确 . 因为在两个整数的加法运算中是没有问题的 ,于是就发现问题出现在带符号位的负数身上 ,对 除符号位外的其余各位逐位取反就产生了反码 .反码的取值空间和原码相同且一一对应 . 下面 是反码的减法运算 :( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )1
8、0(00000001) 反+ (11111110)反 = (11111111反) = ( -0 ) 有问题.( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10(00000001) 反+ (11111101)反 = (11111110反) = ( -1 ) 正确问题出现在 (+0)和 (-0)上,在人们的计算概念中零是没有正负之分的 .(印度人首先将零作为标记 并放入运算之中 ,包含有零号的印度数学和十进制计数对人类文明的贡献极大 ).于是就引入了补码概念 . 负数的补码就是对反码加一 ,而正数不变 ,正数的原码反码补码是一 样的.在补码中用 (-1
9、28)代替了 (-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(00000001) 补+ (11111110) 补= (11111111补) = ( -1 ) 正确所以补码的设计
10、目的是 :使符号位能与有效值部分一起参加运算 ,从而简化运算规则 .使减法运算转换为加法运算 ,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、 C 等其他高级语言中使 用的都是原码。看了上面这些你应该对原码、反码、补码有了新的认识了吧 在计算机内,定点数有 3 种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“ 0”表示正,“ 1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位 除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的
11、末位加1。1、原码、反码和补码的表示方法( 1)原码:在数值前直接加一符号位的表示法。例如: 符号位 数值位+7 原= 00000111 B-7 原=10000111 B注意: a. 数 0 的原码有两种形式:+0原=00000000B-0原=10000000Bb. 8位二进制原码的表示范围:-127+127(2)反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“ 1”,数值部分按位取反。例如:符号位 数值位+7 反 = 00000111 B-7 反=11111000 B注意: a. 数 0 的反码也有两种形式,即+0反=00000000B-0反=11111111Bb. 8位二进制
12、反码的表示范围:-127+1273)补码的表示方法1)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12 进制进行计数循环的,即以 12为模。在时钟上,时针加上(正拨) 12 的整数位或减去(反拨) 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的
13、效果是一样的;因此,在以 12为模的系统中,凡是 减 10 的运算都可以用加 2 来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结 构中只有加法器,所以大部分的运算都必须最终转换为加法) 。10和2对模 12而言互为补数。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满 8 位也就是 256 个数后会产生溢出,又从头开始计数。产生溢出 的量就是计数器的模,显然, 8 位二进制数,它的模数为 28=256。在计算中,两个互补的数 称为“补码”。2)补码的表示:正数:正数的补码和原码相同。负数:负数的补码则是符号位为“ 1”,数值
14、部分按位取反后再在末位(最低位)加1。也就是“反码 +1 ”。例如: 符号位 数值位+7 补= 0 0000111 B-7 补= 1 1111001 B补码在微型机中是一种重要的编码形式,请注意:a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。 正数的补码即是它所表示的数的真值, 而负数的补码的数值部份却不是它所表示的数的真值。 采用补码进行运算,所得结果仍为补码。b. 与原码、反码不同,数值 0的补码只有一个,即0补=00000000B。c. 若字长为8位,则补码所表示的范围为-128+127;进行补码运算时,应注 意所得结果不应超过补码所能表示数的范围。2原码、反码
15、和补码之间的转换由于正数的原码、补码、反码表示方法均相同,不需转换。在此,仅以负数情况分析1)已知原码,求补码。例:已知某数X的原码为10110100B,试求X的补码和反码。解:由X原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求 其补码时,再在其反码的末位加 1。1011010 0 原码反码,符号位不变,数值位取反1 +1补码故:X补=11001100B,X反=11001011B2)已知补码,求原码。分析:按照求负数补码的逆过程,数值部分应是最低位减 1,然后取反。但是对二进制数来说,先减 1 后取反和先取反后加 1 得到的结果是一样的,故仍可采用取反加 1
16、有方法。例:已知某数X的补码11101110B试求其原码 解:由X补=11101110B知,X为负数。求其原码表示时,符号位不变,数值部分按位求反, 再在末位加 1。1110 1110 补码符号位不变,数值位取反1 +1原码132 有符号数运算时的溢出问题 请大家来做两个题目: 两正数相加怎么变成了负数?1)(+72)+(+98)=? 0 1 0 0 1 0 0 0 B +72+ 0 1 1 0 0 0 1 0 B +981 0 1 0 1 0 1 0 B-42两负数相加怎么会得出正数?2)(-83)+(-80)=?1 0 1 0 1 1 0 1 B -83+ 1 0 1 1 0 0 0 0
17、B -800 1 0 1 1 1 0 1 B+93思考:这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?答案:这是因为发生了溢出。如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码 表示法时,可表示的数 X的范围是-2n-1W X < 2n-1-1当n=8时,可表示的有符号数的范围为-128+127。两个有符号数进行加法运算时,如果运 算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只 能出现在两个同符号数相加或两个异符号数相减的情况下。对于加法运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高
18、位(符号位) 相加(包括次高位的进位)却没有进位输出时,或者反过来,次高位没有进位加入最高位, 但最高位却有进位输出时,都将发生溢出。因为这两种情况是:两个正数相加,结果超出了 范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。而对于减法运算,当次高位不需从最高位借位,但最高位却需借位(正数减负数,差超出范围),或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围) 也会出现溢出。在计算机中,数据是以补码的形式存储的,所以补码在 c 语言的教学中有比较重要的地位, 而讲解补码必须涉及到原码、反码。本部分演示作何一个整数的原码、反码、补码。过程与 结果显
19、示在列表框中,结果比较少,不必自动清除,而过程是相同的,没有必要清除。故需 设清除各部分及清除全部的按钮。测试时注意最大、最小正负数。用户使用时注意讲解不会 溢出:当有一个数的反码的全部位是 1 才会溢出,那么它的原码是 10000.,它不是负数,故 不会溢出。在 n 位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余 n-1 位 为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真 值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码 的最低位加一。注意符号位不变。总结:提示信息不要太少,可“某某数的反码是某某” ,而不
20、是只显示数值。原码、反码和补码、原码 求原码:X >0,则符号位为0,其余照抄; X < 0,则符号位为1其余照抄。X 原 = 01001001X原=11001001X 反 = 01001001X 反 = 10110110【例 1】X=+1001001【例 2】X=-1001001二、反码 求反码:若X>0,符号位为0,其余照抄; 若X < 0,符号位为1,其余按位取反。【例 3】X=+1001001【例 4】X=-1001001三、补码 求补码:若X>0,符号位为0,其余照抄; 若X < 0,符号位为1,其余取反后,最低位加1。【例 5】X=+100100
21、1X 补 = 01001001【例 6】X=-1001001X 补 = 10110111四、补码加减法计算机中实际上只有加法,减法运算转换成加法运算进行,乘法运算转换成加法运算进 行,除法运算转换成减法运算进行。用补码可以很方便的进行这种运算。1 、补码加法X+Y补=X补 + Y补【例 7】X=+0110011,Y=-0101001,求X+Y补X补=00110011Y补=11010111X+Y 补 = X 补 + Y 补 = 00110011+11010111=00001010 注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果 不是100001010,而是 00001010。2、补码减法X-Y补=X补-丫补=X补 + -Y补其中 -Y 补称为负补,求负补的方法是:对补码的每一位(包括符号位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇幼保健试题库及答案
- 扭矩系数试验课件
- 扫地车安全教育培训总结课件
- 2025年注会会计考试真题及答案
- 2025年中职护理基础考试试题及答案
- 2025年化工职称考试试题及答案
- 2025年体育教育自考试题及答案
- 情景课件教学课件
- 泰安数学中考试题及答案
- 悯农重点课件
- 四年级上册语文习题课件-4 繁 星|部编版(共14张PPT)
- 数独题目高级50题(后附答案)
- 部编版一年级上册道德与法治全册教案
- 当代西方美学
- 五年级语文阅读理解十篇(含答案)
- 试验设计与数据处理-李云雁-全套323页ppt课件
- 焊研威达埋弧焊机小车A系列说明书
- 静脉血栓栓塞症抗凝治疗微循环血栓防治专家共识
- 王崧舟教学实录——《圆明园的毁灭》
- 商业银行资产减值准备计提管理办法
- 浅谈部门预算编制存在的问题及建议
评论
0/150
提交评论