补码运算规则

上传人:ji****72 文档编号:35928024 上传时间:2018-03-22 格式:DOC 页数:6 大小:43KB
返回 下载 相关 举报
补码运算规则_第1页
第1页 / 共6页
补码运算规则_第2页
第2页 / 共6页
补码运算规则_第3页
第3页 / 共6页
补码运算规则_第4页
第4页 / 共6页
补码运算规则_第5页
第5页 / 共6页
点击查看更多>>
资源描述

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

1、补码补码(twos complement) 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以 将符号位和数值位统一处理;同时,加法和减法也可以统一处理。此外,补码 与原码的的相互转换,其运算过程是相同的,不需要额外的硬件电路。补码的特性 1、一个整数(或原码)与其补数(或补码)相加,和为模。 2、对一个整数的补码再求补码,等于该整数自身。 3、补码的正零与负零表示方法相同。机器数:机器数:计算机中参与运算的数被称为机器数,有以下特点,1、计算机中参与运算的数均为二进制数,这是因为,运算电路是由只能识别“0” 、 “1”的数字电路组成。2、机器数有带符号数和无符号数两种。 3

2、、带符号的机器数有源码、反码和补码三种表示方式;无符号数没有源码、反 码、补码的区别。 4、CPU 的运算电路是按补码的运算规律设计,因此,进行运算的带符号数均 用补码表示。无符号数的运算无符号数的运算1、与手工二进制运算的方法相同(指运算电路) 。 2、可以用十六进制数的运算代替二进制数的运算,计算时不容易出错,而且快 捷。源码表示法(带符号数)源码表示法(带符号数)1、正数。最高位是符号位,用“0”表示正号,即 150 位的第 15 位为 0,70 位的第 7 位为 0。 2、负数。最高位是符号位,用“1”表示负号,即 150 位的第 15 位为 1,70 位的第 7 位为 1。 3、求源

3、码的方法:先将真值转换成二进制数,再写成固定的 8 位或 16 位,最 高位用“0”或“1”表示数的正号和负号。计算机就是用这种方法表示。真值真值就是带符号的十进制数(补码的绝对值) ,如+20、-20、+120、-120。 在计算机内,如果是一个二进制数,其最左边的位是 1,则我们可以判定它为 负数,并且是用补码表示。若要得到一个负二进制补码的真值(原来的数值) , 只要对其求补码,就可得到真值。 【例 5】-65 的补码是 10111111 若直接将 10111111 转换成十进制,发现结果并不是-65,而是 191。各位取反(除符号位):11000000,再+1:11000001(-65

4、)反码表示法(带符号数)反码表示法(带符号数)1、正数。源码等于反码。 2、负数。源码的最高位“1”不变,数值部分“1”变“0” , “0”变“1” 。 3、求反码的方法:正数不用求反码,正数的源码就是反码。负数的反码是以负 数的源码再求反码。补码表示法(带符号数)补码表示法(带符号数)1、正数。源码等于补码。 2、负数。反码的最高位“1”不变,数值部分+1。 求补码的方法。正数的源码等于补码。负数的补码是以该负数的源码求反码然 后再+1 获得。同一个数字在不同的补码表示形式中是不同的。比如-15 的补码, 在 8 位二进制中是 11110001,然而在 16 位二进制补码表示中,就是 111

5、1111111110001。以下都使用 8 位 2 进制来表示。 【例】求-5 的补码。 因为给定数是负数,则符号位为“1” 。 后七位:-5 的原码(10000101)符号位不变(10000101)数值位取反 (11111010)加 1(11111011) 所以-5 的补码是 11111011。【例】数 0 的补码表示是唯一的。 +0补=+0反=+0原=00000000 -0补=11111111+1=00000000 补码转化为原码 已知一个数的补码,求原码的操作其实就是对该补码再求补码: 如果补码的符号位为“0” ,表示是一个正数,其原码就是补码。 如果补码的符号位为“1” ,表示是一个负

6、数,那么求给定的这个补码的补码 就是要求的原码。【例】已知一个补码为 11111001,则原码是 10000111(-7) 。 因为符号位为“1” ,表示是一个负数,所以该位不变,仍为“1” 。 其余七位 1111001 取反后为 0000110; 再加 1,所以是 10000111。补码的运算(带符号数)补码的运算(带符号数)补码的运算原理:补码的运算原理:计算机中的 CPU 仅有加法电路,没有减法电路。采用补码运算的目的,是将减法变为加法。同时,补码运算将符号位视为数共同参与运算, 其结果仍然不会出错。但是,补码运算的条件是运算器有固定的容量,即“模” 。“模”是指一个计量系统的计数范围。

7、如时钟等。计算机也可以看成一个 计量机器,它也有一个计量范围,即都存在一个“模” 。表示 n 位的计算机计量 范围是 02n-1,模=2n(2n 表示将 2 的 n 次方) 。例如,两位十进制计数器,它的计数容量是 0099,模=100时钟的计数容量是 011,模=12“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计 量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。 例如:假设当前时针指向 10 点,而准确时间是 6 点,调整时间可有以下两种拨 法:一种是倒拨 4 小时,即:10-4=6;另一种是顺拨 8 小时:10+8=12+6=6 在以 12 模的系统

8、中,加 8 和减 4 效果是一样的,因此凡是减 4 运算,都可以用 加 8 来代替。对“模”而言,8 和 4 互为补数。实际上以 12 模的系统中,11 和 1,10 和 2,9 和 3,7 和 5,6 和 6 都有这个特性。共同的特点是两者相加等 于模。对于计算机,其概念和方法完全一样。n 位计算机,设 n=8, 所能表示的 最大数是 11111111,若再加 1 成为 100000000(9 位) ,但因只有 8 位,最高位 1 自然丢失。又回了 00000000,所以 8 位二进制系统的模为 28。在这样的系统 中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把 补数用

9、到计算机对数的处理上,就是补码。另外两个概念: 一的补码(ones complement) 指的是正数=原码,负数=反码 二的补码(twos complement) 指的就是通常所指的补码。1、补码的加法。两个补码相加,算法与二进制加法相同,也可以用十六进制数 相加。注意:和仍然是一个补码,符合补码定义。 X+Y补 = X补 + Y补【例 6】X=+0110011, Y=-0101001,求X+Y补 X补=00110011 Y补=11010111 X+Y补 = X补 + Y补 = 00110011+11010111=00001010 注:因为计算机中运算器的位长是固定的(定长运算) ,上述运算

10、中产生的最高 位进位将丢掉,所以结果不是 100001010,而是 00001010, 。2、验算结果。由补码求真值的方法:先求出补码对应的源码,再求出真值。对 X 的补码再进行求补码运算,就得到 X 的源码。从补码求源码的方法:正数不用求源码,源码等于补码。负数的补码符号位 不变,数值部分按位取反,然后再+1,得到源码。注意:由真值求补码或由补码求真值的方法,都必须用二进制数表示才能进 行。 补码的减法。计算机不能做减法,采用的方法是对减数进行进行变补,再与被 减数相加实现的。变补运算的方法:连同符号位一同取反+1。 X-Y补 = X补 - Y补 = X补 + -Y补【1】【1】 在上一个版

11、本中有如下说明:“其中-Y补 称为负补,求负补的方法是:负数的绝对值的原码所有位按位取 反;然后整个数加 1。 (恢复本来解释。请路人真正理解并实际验证后再修改。 以免误导大众。另外,例 6 不具典型性,新增例 7。 ) ” 私以为, 不必要提出负补的概念以使问题复杂化,尽管该解法是正确的,但却 完全没有必要增加新的运算方法及运算结构。求-Y补,只需,先将符号位取 反,求出-Y, 再求-Y 的补码即可。尽管这与求负补的方法实际上是一致的, 但是却简化了概念,仅仅是对过去概念以及运算结构的复用。 相应的,原例 7(现例 8)重新作了修改。【例 7】1-1 十进制 1 的原码 00000001 转

12、换成补码:00000001 -1 的原码 10000001 转换成补码:11111111 1+(-1)=0 00000001+11111111=00000000 00000000 转换成十进制为 0 0=0 所以运算正确。【例 8 增】-7-(-10) 十进制 改为加法形式:-7-(-10)=-7+(-(-10) ) -7 的补码:11111001 -(-10)的补码:-10 的原码为 10001010,-(-10)的原码为 00001010, -(-10)的补码就是其原码,为 00001010 -7 - (-10)= -7 + 10 = 3 11111001+00001010 = 00000

13、011 转换成十进制为 33、手工算法:直接减。不论被减数是大于、等于或小于减数,均用被减数减去 减数。当被减数小于减数时,直接向高位借位,结果仍然正确,而且是一个补 码。例:(-64)-(+20)=(-64)+(-20)= -84(+20)-(-64)=(+20)+(+64)= +84带符号数补码的范围带符号数补码的范围1、8 位带符号数补码的范围:-128+127,80H7FH 或 0X800XFF。 2、16 位带符号数补码的范围:-32768+32767,8000H7FFFH 或 0X80000X7FFF。不带符号数补码的范围不带符号数补码的范围1、8 位不带符号数补码的范围:0+25

14、5,00HFFH 或 0X000XFF。 2、16 位不带符号数补码的范围:0+65535,0000HFFFFH 或 0X00000XFFFF。代数解释代数解释在十进制中我们可以把 n 位二进制体系中的数 a 表示为:求补码,意味着求: 而根据等比数列求和公式:则 因为这里 k0,k1,k2,k3不是 0 就是 1,所以 1k0,1-k1,1-k2 的运算就是二进 制下的取反 注:n 位二进制,最高位为符号位,因此表示的数值范围-2(n-1) 2(n-1) - 1,所以模为 2(n-1)。上面提到的 8 位二进制模为 28 是因为最高位非符号位, 表示的数值范围为 028-1。补码总结补码总结

15、补码只是一种相对合理的编码方案。这个方案在负数的机器表示中解决了 3 个 问题: 1、数的表示:在数的表示上通过人为的定义来消除编码映射的不唯一性,对转 换后的 10000000 强制认定为-128。当然对原码和反码也可以做这种强制认定, 那为什么原码和反码没有流行起来? 2、数的运算:原码和反码没有流行起来,是因为在数的运算上对符号位的处理 无法用当时已有的机器物理设计来实现,由于原码和反码在编码时采用了硬性 的人工设计,这种设计在数理上无法自动的通过模来实现对符号位的自动处理, 符号位必须人工处理,必须对机器加入新的物理部件来专门处理符号位,这加 大了机器设计难度,加大的机器成本,不到万不

16、得已,不走这条路。设计补码 时,有意识的引用了模运算在数理上对符号位的自动处理,利用模的自动丢弃 实现了符号位的自然处理,仅仅通过编码的改变就可以在不更改机器物理架构 的基础上完成的预期的要求,所以补码沿用至今。 3、自身逻辑意义的完整性:补码这个编码方案要解决的是如何在机器中表示负数,其本质意义为用一个正数来表示这个正数对应的负数。所谓-20 的补码是指: 如何在机器中用补码形式表示-20。具体过程是这样的:将 20 的二进制形式直 接写出 00010100,然后所有位取反变成 11101011,再加 1 变成了 11101100。 最简单的补码转换方式,不必去理会转换过程中的符号位,只关注转换前和最 终转换后的符号位就行了。那么对 11101100 求出其补码又具有什么现实含义呢?对一个数求补,逻辑过程 是对这个数的所有的二进制位按位取反再加 1。现实含义是求出这个数对应的 负数形式。对 11

展开阅读全文
相关资源
相关搜索

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

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