原码反码补码及求法

上传人:豆浆 文档编号:763660 上传时间:2017-05-13 格式:DOC 页数:6 大小:37.50KB
返回 下载 相关 举报
原码反码补码及求法_第1页
第1页 / 共6页
原码反码补码及求法_第2页
第2页 / 共6页
原码反码补码及求法_第3页
第3页 / 共6页
原码反码补码及求法_第4页
第4页 / 共6页
原码反码补码及求法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《原码反码补码及求法》由会员分享,可在线阅读,更多相关《原码反码补码及求法(6页珍藏版)》请在金锄头文库上搜索。

1、1、在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9 的补码是 00001001。(2)负数的补码:符号位为 1,其余位为该数绝对值的原码按位取反;然后整个数加 1。例如,-7 的补码:因为是负数,则符号位为“1”,整个为 10000111;其余7 位为 -7 的绝对值+7 的原码 0000111 按位取反为 1111000;再加 1,所以-

2、7 的补码是 11111001。已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为 1,其余各位取反,然后再整个数加 1。例如,已知一个补码为 11111001,则原码是 10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1” ;其余 7 位1111001 取反后为 0000110;再加 1,所以是 10000111。补码只不过是用来表示带符号数而已补码的原则是:正数的补码是其本身,也就是原码负数的补码是各位取反后加 1也就

3、是其反码加 1+0 的补码就是其原码,也就是说是 0000 0000 而已(对于 8 位来说)-0 的补码是其反码加 1,其反码是 1111 1111,当然,其反码加 1 后就是溢出一个进位后,仍然是 0000 0000. 0 只 有 1 种 补 码正 数 的 原 码 、 反 码 、 补 码 是 同 一 个 数0 正 1 负3、“ 模 ”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:时钟的计量范围是 011,模=12。 表示 n 位的计算机计量范围是 02(n)-1 ,模=2(n)。【注:n 表示指数】“模” 实质上是计量器产

4、生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。例如: 假设当前时针指向 10 点,而准确时间是 6 点,调整时间可有以下两种拨法:一种是倒拨 4 小时,即:10-4=6 另一种是顺拨 8 小时:10+8=12+6=6在以 12 模的系统中,加 8 和减 4 效果是一样的,因此凡是减 4 运算,都可以用加 8 来代替。对“模”而言,8 和 4 互为补数。实际上以 12 模的系统中, 11 和 1,10 和2,9 和 3,7 和 5,6 和 6 都有这个特性。共同的特点是两者相加等于模。 对于计算机,其概念和方法完全一样。n 位计算

5、机,设 n=8, 所能表示的最大数是 11111111,若再加 1 称为 100000000(9 位) ,但因只有 8 位,最高位 1 自然丢失。又回了 00000000,所以 8 位二进制系统的模为 2(8)。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。 4、把补数用到计算机对数的处理上,就是补码。反码 在计算机内,定点数有 3 种表示法:原码、反码和补码。所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”正,“1”负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:

6、正数的补码与其原码相同;负数的补码是在其反码的末位加 1。1、原码、反码和补码的表示方法(1) 原码:在数值前直接加一符号位的表示法。例如: 符号位 数值位+7原= 0 0000111 B-7原 = 1 0000111 B注意:a. 数 0 的原码有两种形式:+0原=00000000B -0 原=10000000Bb. 8 位二进制原码的表示范围:-127+127(2)反码:正数:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。例如: 符号位 数值位+7反= 0 0000111 B-7反 = 1 1111000 B注意:a. 数 0 的反码也有两种形式,即+0反=00

7、000000B- 0反 =11111111Bb. 8 位二进制反码的表示范围:-127+127(3)补码的表示方法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。由此可见,对

8、于一个模数为 12 的循环系统来说,加 2 和减 10 的效果是一样的;因此,在以 12 为模的系统中,凡是减 10 的运算都可以用加 2 来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10 和 2 对模 12而言互为补数。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为 8),因此它的运算也是一种模运算。当计数器计满 8 位也就是 256 个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8 位二进制数,它的模数为 28=256。在计算中,两个互补的数称为“补码”。2)补码的表示:正数:正数的补

9、码和原码相同。负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加 1。也就是“反码+1”。例如: 符号位 数值位+7补= 0 0000111 B-7补 = 1 1111001 B补码在微型机中是一种重要的编码形式,请注意:a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。b. 与原码、反码不同,数值 0 的补码只有一个,即 0补=00000000B。c. 若字长为 8 位,则补码所表示的范围为-128 +127 ;进行补码运算时,应

10、注意所得结果不应超过补码所能表示数的范围。2原码、反码和补码之间的转换由于正数的原码、补码、反码表示方法均相同,不需转换。在此,仅以负数情况分析。(1) 已知原码,求补码。例:已知某数 X 的原码为 10110100B,试求 X 的补码和反码。解:由X原 =10110100B 知,X 为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加 1。1 0 1 1 0 1 0 0 原码1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反1 +11 1 0 0 1 1 0 0 补码故:X补=11001100B,X反=11001011B。(2) 已知补码,求原码。 分析

11、:按照求负数补码的逆过程,数值部分应是最低位减 1,然后取反。但是对二进制数来说,先减 1 后取反和先取反后加 1 得到的结果是一样的,故仍可采用取反加 1 有方法。例:已知某数 X 的补码 11101110B,试求其原码。解:由X补 =11101110B 知,X 为负数。求其原码表示时,符号位不变,数值部分按位求反,再在末位加 1。1 1 1 0 1 1 1 0 补码1 0 0 1 0 0 0 1 符号位不变,数值位取反1 +11 0 0 1 0 0 1 0 原码132 有符号数运算时的溢出问题请大家来做两个题目:两正数相加怎么变成了负数?1)(+72)+(+98 )= ?0 1 0 0 1

12、 0 0 0 B +720 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 B -800 1 0 1 1 1 0 1 B +93思考:这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?答案:这是因为发生了溢出。如果计算机的字长为 n 位,n 位二进制数的最高位为符号位,其余 n-1 位为数值位,采用补码表示法时,可表示的数 X 的范围是 -2n-1X2n-1-1当 n

13、=8 时,可表示的有符号数的范围为-128 +127。两个有符号数进行加法运算时,如果运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。 对于加法运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时,或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。因为这两种情况是:两个正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。而对于减法运算,当次高位不需从最高位借位,但最高位却需借位(正数减负

14、数,差超出范围),或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围),也会出现溢出。在计算机中,数据是以补码的形式存储的,所以补码在 c 语言的教学中有比较重要的地位,而讲解补码必须涉及到原码、反码。本部分演示作何一个整数的原码、反码、补码。过程与结果显示在列表框中,结果比较少,不必自动清除,而过程是相同的,没有必要清除。故需设清除各部分及清除全部的按钮。测试时注意最大、最小正负数。用户使用时注意讲解不会溢出:当有一个数的反码的全部位是 1 才会溢出,那么它的原码是 10000.,它不是负数,故不会溢出。在 n 位的机器数中,最高位为符号位,该位为零表示为正,为一表示

15、为负;其余 n-1 位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。注意符号位不变。总结:提示信息不要太少,可“某某数的反码是某某”,而不是只显示数值。1.原码的求法:(1)对于正数,转化为二进制数,在最前面添加一符号位(这是规定的), 用 1 表示负数,二表示正数.如:0000 0000 是一个字节,其中 0 为符号位,表示是正数,其它七位表示二进制的值.其实,机器不管这些,什么符号位还是值,机器统统看作是值来计算. 正数的原码、反码、补码是同一个数!(2)对于负数,转化为二进制数,前面符号位为 1.表示是负数 .计算原码只要在转化的二进制数前面加上相应的符号位就行了.2.反码的求法:对于负数,将原码各位取反 ,符号位不变.3.补码的求法:对于负数,将反码加上二进制的 1 即可,也就是反码在最后一位上加上 1 就是补码了.

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

最新文档


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

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