数的加减乘除.docx
- 文档编号:23588202
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:67
- 大小:508.09KB
数的加减乘除.docx
《数的加减乘除.docx》由会员分享,可在线阅读,更多相关《数的加减乘除.docx(67页珍藏版)》请在冰豆网上搜索。
数的加减乘除
第三编 中央处理器(CPU)
本篇将剖析CPU的内部结构,讲述CPU的功能,包括计算机的运算、指令系统、时序系统、中断系统及控制单元。
第六章 计算机的运算方法
计算机的应用领域极其广泛,但不论其应用在什么地方,信息在机器内部的形式都是一致的,即均为0和1组成的各种编码。
本章主要介绍参与运算的各类数据(包括无符号数和有符号数;定点数和浮点数等),以及它们在计算机中的计算方法。
第一节 无符号数和有符号数
在计算机中参与运算的数有两大类:
无符号数和有符号数。
一、无符号数
计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。
所谓无符号数即没有符号的数,在寄存器中的每一位均可用来存放数值。
当存放有符号数时,则需留出位置存放“符号”。
因此,在机器字长相同时,无符号数与有符号数所对应的数值范围不同的。
以机器字长为16位为例,无符号数的表示范围为0~65535,而有符号数的表示范围为-32768~+32767(此数值对应原码表示)。
二、有符号数
1.机器数与真值
对有符号数而言,符号的“正”、“负”机器是无法识别的,但由于“正”、“负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“负”,这样符号也被数字化了,并且规定将它放在有效数字的前面,这样就组成了有符号数。
如有符号数(小数):
把符号“数字化”的数叫做机器数,而把带“十”或“—”符号的数叫做真值。
一旦符号数字化后,符号和数值就形成了一种新的编码。
在运算过程中,符号位能否和数值部分一起参加运算?
如果参加运算,符号位又需作哪些处理?
这些问题都与符号位和数值位所构成的编码有关,这些编码就是原码、补码、反码和移码。
2.原码表示法
原码是机器数中最简单的一种表示形式,其符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称作带符号的绝对值表示。
上面列举的4个真值所对应的机器数即为原码。
为了书写方便以及区别整数和小数,约定整数的符号位与数值位之间用逗号“,”隔开:
小数的符号位与数值位之间用小数点“.”隔开。
如上面4个数的原码分别是0.1011、1.1011、0,1100和1,1100。
由此可得原码的定义。
(1)整数原码的定义为。
式中x为真值,n为整数的位数。
例如,当x=+1110时,[x]原=0,1110
当x=-1110时,[x]原=24-(-1110)=1,1110
小数原码的定义为
例如,当x=+0.1101时,[x]原=0.1101
当x=-0.1101时,[x]原=1-(-0.1101)=1.1101
根据定义,已知真值可求原码,反之已知原码也可求真值。
如:
当[x]原=1.0011时,由定义得x=1-[x]原=1-1.0011=-0.0011
当[x]原=1,1100时,由定义得x=2n-[x]原=24-1,1100=10000-11100=-1100
当[x]原=0.1101时,x=0.1101
(2)“0”的原码表示法。
当x=0时
[+0.0000]原=0.0000
[-0.0000]原=1-(0.0000)=1.0000
可见[+0]原不等于[-0]原,即原码中的“零”有两种表示形式。
(3)原码的表数范围。
对于定点整数:
一个n+1位原码能表示的最大正数为01…11,即2n-1;能表示的最小数为绝对值最大的负数111…1,即-(2n-1)。
所以原码能表示的数值范围为:
-(2n-1)≤x≤2n-1。
对于定点小数:
一个n+1位定点小数原码能表示的最大正数为0.1…11,即1-2-n;能表示的最小数为绝对值最大的负数为1.11…1,即-(1-2-n)。
定点小数原码的数值范围为:
-(1-2-n)≤x≤1-2-n。
原码表示简单明了,并易于和真值转换。
但用原码进行加减运算时,却带来了许多麻烦,例如,当两个操作数符号不同且要作加法运算时,先要判断两数绝对值大小,然后将绝对值大的数减去绝对值小的数,结果的符号以绝对值大的数为准。
运算步骤既复杂又费时,而且本来是加法运算却要用减法器实现。
那么能否在计算机中只设加法器,只作加法操作呢?
如果能找到一个与负数等价的正数来代替该负数,就可把减法操作用加法代替。
而且机器数采用补码时,就能满足此要求。
3.补码表示法
(1)补数的概念。
在日常生活中,常会遇到“补数”的概念。
如时钟指示6点,欲使它指示3点,既可按顺时针方向将分针转9圈,又可按逆时针方向将分针转3圈,结果是一致的。
假设顺时针方向转为正,逆时针方向转为负,则有
6-3=3 6+9=15
由于时钟的时针转一圈能指示12个小时,这“12”在时钟里是不被显示而自动丢失的,即15-12=3,故15点和3点均显示3点。
这样-3和+9对时钟而言作用是一致的。
在数学上称12为模,写作mod12,而称+9是-3以12为模的补数,记作
-3≡+9 (mod12)
或者说对12而言,-3和+9是互为补数的。
同理有
-4≡+8 (mod12)
-5≡+7 (mod12)
即对模12而言,+8和+7分别是-4和-5的补数。
可见,只要确定了“模”,就可找到一个与负数等价的正数(该正数即为负数的补数)来代替此负数,这样就可把减法运算用加法实现。
例如:
设A=9,B=5
求:
A-B(modl2)。
解:
A-B=9-5=4(作减法)
对模12而言,-5可以用其补数+7代替,即
-5≡+7 (mod12)
所以A-B=9+7=16(作加法)
对模12而言,12会自动丢失,所以16等价于4,即4≡16(modl2)。
进一步分析发现,3点、15点、27点……在时钟上看见的都是3点,即
3≡15≡27 (mod12)
也即3≡3+12≡3+24≡3 (mod12)
这说明正数相对于“模”的补数就是正数本身。
上述补数的概念可以用到任意“模”上,如
-3≡+7 (mod10)
+7≡+7 (modl0)
-3≡+97 (modl02)
+97≡+97 (modl02)
1011≡+0101 (mod24)
+0101≡+0101 (mod24)
0.1001≡+1.0111 (mod2)
+0.1001≡+0.1001 (mod2)
由此可得如下结论;
·一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身求得。
·两个互为补数的数,它们绝对值之和即为模数。
·正数的补数即该正数本身。
将补数的概念用到计算机中,使出现了补码这种机器数。
(2)补码的定义。
整数补码的定义为
式中x为真值,n为整数的位数。
例如,当x=+1010时,
[x]补=0,1010
↑
用逗号将符号位和数值部分隔开
当x=-1101时,
[x]补=2n+1+x=100000-1101=1,0011
↑
用逗号将符号位和数值部分隔开
小数补码的定义为
式中x为真值。
例如,当x=0.1001时,[x]补=0.1001
当x=-0.0110时,
[x]补=2+x=10.0000-0.0110=1.1010
(3)“0”的补码表示法。
当x=0时,
[+0.0000]补=0.0000
[-0.0000]补=2+(-0.0000)=10.0000-0.0000=0.0000
显然[+0]补=[-0]补=0.0000,即补码中的“零”只有一种表示表示形式。
(4)补码的表数范围。
一个n+1位整数补码能表示的最大数是011…1,即2n-1;能表示的最小数为100…0,即-2n。
所以它能表示的数值范围是:
-2n≤x≤2n-1
一个n+1位小数补码能表示的最大数是0.11…1,即1-2-n;能表示的最小数为1.00…0,即-1。
所以它能表示的数值范围是:
-1≤x≤1-2-n
对于小数,若x=-1,则根据小数补码定义,有[x]补=2+x=10.0000-1.0000=1.0000。
可见,-1本不属于小数范围,但却有[-1]补存在(其实在小数补码定义中已指明),这是由于补码中的零只有一种表示形式,故它比原码能多表示一个“-1”。
此外,根据补码定义,已知补码还可以求真值,如
若[x]补=1.0101
则x=[x]补-2=1.0101-10.0000=-0.1011
若[x]补=1,1110
则x=[x]补-24+1=1,1110-100000=-0010
若[x]补=0.1101
则x=[x]补=0.1101
同理,当模数为4时,形成了双符号位的补码。
如x=-0.1001,对(mod22)而言,
[x]补=22+x=100.0000-0.1001=11.0111
这种双符号位的补码又叫做变形补码,它在阶码运算和溢出判断中,有很重要的作用。
在形成补码的过程中又出现了减法,如
x=-1011
[x]补=24+l+x=100000-1011=1,0101
若我们把模24+1改写成25=1000000=11111+00001时,则上式可写成:
[x]补=25+x=11111+00001-x1x2x3x4
又因x是负数,若x用-x1x2x3x4表示,其中xi(i=1,2,3,4)不为0则为1,于是上式可写成:
[x]补=25+x=11111+00001-x1x2x3x4
=1x1x2x3x4+00001
因为任一位“1”减去xi即为xi,所以上式成立。
…
由于负数-x1x2x3x4的原码为1,x1x2x3x4,因此对这个负数求补,可以看作对它的原码除符号位外,每位求反,末位加1,简称“求反加1”。
这样,由真值通过原码求补码就可避免减法运算。
同理,对于小数也有同样结论。
“由原码除符号位外,每位求反,末位加1求补码”这一规则,同样适用于由[x]补求[x]原。
而对于一个负数,若对其原码除符号位外,每位求反(简称“每位求反”),或是对其补码减去末位的1,即得机器数的反码。
4.反码表示法
反码通常用来作为由原码求补码或者由补码求原码的中间过渡。
反码的定义如下:
(1)整数反码的定义。
式中x为真值,n为整数的位数。
例如,当x=+1101时,
[x]反=0,1101
↑
用逗号将符号位和数值部分隔开
当x=-1101时,
[x]反=(x4+1-1)+x=11111-1101=1,0010
↑
用逗号将符号位和数值部分隔开
小数反码的定义为:
式中x为真值,n为小数的位数。
例如,当x=+0.0110时,[x]反=0.0110
当x=-0.0110时,
[x]反=(2-2-4)+x=1.1111-0.0110=1.1001
(2)“0”的反码表示法。
当x=0时,
[+0.0000]反=0.0000
[-0.0000]反=(10.0000-0.0001)-0.0000=1.1111
可见[+0]反不等于[-0]反,即反码中的“零”也有两种表示形式。
(3)反码的表数范围。
定点整数反码的数值范围为:
-(2n-1)≤x≤2n-1。
定点小数原码的数值范围为:
-(1-2-n)≤x≤1-2-n。
实际上,反码也可看作是mod(2-2-n)(对于小数)或mod(2n+1-1)(对于整数)的补码。
与补码相比,仅在末位差1,因此有些书上称小数的补码为2的补码,而称小数的反码为1的补码。
综上所述,三种机器数的特点可归纳如下:
·三种机器数的最高位均为符号位。
符号位和数值部分之间可用“.”(对于小数)或“,”(对于整数)隔开。
·当真值为正时,原码、补码和反码的表示形式均相同,即符号位用“0”表示,数值部分与其值相同。
·当真值为负时,原码、补码和反码的表示形式不同,但其符号位都用“1”表示,而数值部分有如下关系,即补码是原码的“求反加1”,反码是原码的“每位求反”。
5.移码表示法
(1)移码的定义。
当真值用补码表示时,由于符号位和数值部分一起编码,与习惯上的表示法不同,因此人们很难从补码的形式上直接判断其真值的大小,如:
十进制数x=21,对应的二进制数为+10101,则[x]补=0,10101;
十进制数x=-2l,对应的二进制数为-10101,则[x]补=1,01011;
十进制数x=31,对应的二进制数为+11111,则[x]补=0,11111;
十进制数x=-31,对应的二进制数为-11111,则[x]补=1,00001;
上述补码表示中“,”逗号在计算机内部是不存在的,因此,从代码形式看符号位也是一位二进制数。
按这六位二进制代码比较其大小的话,会得出101011>010101,100001>011111,其实恰恰相反。
如果我们对每个真值加上一个2n(n为整数的位数),情况就发生了变化,
如:
x=10101加上25可得10101+100000=110101;
x=-10101加上25可得-10101+100000=001011l;
x=11111加上25可得11111+100000=111111;
x=-11111加上25可得-11111+100000=000001;
比较它们的结果可见,110101>001011,111111>000001。
这样一来,从六位代码本身就可看出其值的实际大小。
由此可得移码的定义
[x]移=2n+x(2n>x≥-2n)
式中x为真值,n为整数的位数。
其实移码就是在真值上加一个常数2n。
在数轴上移码所表示的范围恰好对应与真值在数轴上的范围向轴的正方向移动2n个单元。
如下图所示,由此而得移码之称。
例如,x=10100
[x]移=25+10100=1,10100
↑
用逗号将符号位和数值部分隔开
x=-10100
[x]移=25-10100=0,01100
↑
用逗号将符号位和数值部分隔开
(2)“0”的移码表示。
当x=0时
[+0]移=25+0=1,00000
[-0]移=25-0=1,00000
可见[+0]移等于[-0],即移码表示中零也是惟一的。
此外,由移码的定义可见,当n=5时,其最小的真值为x=-25=-100000,则[-100000]移=25+x=100000-100000=0,00000,即最小值的移码为全0,这符合人们的习惯。
利用移码的这一特点,当浮点数的阶码用移码表示时,就能很方便地判断阶码的大小。
(3)移码的表数范围。
进一步观察发现,同一个真值的移码和补码仅差一个符号位,若将补码的符号位由“0”改为“1”,或从“1”改为“0”,即可得该真值的移码。
整数移码的表数范围和整数补码的表数范围相同,即为-2n≤x≤2n-1
第二节 数的定点表示和浮点表示
在计算机中,小数点不用专门的器件表示,而是按约定的方式标出。
共有两种方法来表示小数点的存在,即定点表示和浮点表示。
定点表示的数称为定点数,浮点表示的数称为浮点数。
一、定点表示
小数点固定在某一位置的数为定点数,有以下两种格式。
当小数点位于数符和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。
采用定点数的机器叫做定点机。
数值部分的位数n决定了定点机中数的表示范围。
若机器数采用原码,小数定点机中数的表示范围是-(1-2-n)~(1-2-n),整数定点机中数的表示范围是-(2n-1)~(2n-1)。
在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或纯整数时,必须乘上一个比例因子,否则会产生“溢出”。
二、浮点表示
实际上计算机中处理的数不一定是纯小数或纯整数(如圆周率3.1416),而且有些数据的数值范围相差很大(电子的质量9×10-28克,太阳的质量2×1033克),它们都不能直接用定点小数或定点整数表示,但均可用浮点数表示。
浮点数即小数点的位置可以浮动的数,如
352.47=3.5247×102
=3524.7×10-1
=0.35247×103
显然,这里小数点的位置是变化的,但因为分别乘上了不同的10的方幂,故值不变。
通常,浮点数被表示成
N=S×rj
式中S为尾数(可正可负),j为阶码(可正可负),r是基数(或基值)。
在计算机中,基数可取2、4、8或16等。
以基数r=2为例,数N可写成下列不同形式:
N=11.0101
=0.110101×210
=1.10101×21
=1101.01×2-10
=0.00110101×2100
为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,故上例中0.110101×210和0.00110101×2100形式是可以采用的。
此外,将尾数最高位为1的浮点数称作规格化数,即0.110101×210为浮点数的规格化形式。
浮点数表示成规格化形式后,其精度最高。
1.浮点数的表示形式
浮点数在机器中的形式如下所示。
采用这种数据格式的机器叫做浮点机。
可见浮点数由阶码j和尾数S两部分组成。
阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位置;尾数是小数,其位数n反映了浮点数的精度;尾数的符号Sf代表浮点数的正负。
2.浮点数的表示范围
以通式N=S×rj为例,设浮点数阶码的数值位取m位,尾数的数值位取n位,当浮点数为非规格化数时,它在数轴上的表示范围如下所示。
由图可见,其最大正数为
;最小正数为
;最大负数为
;最小负数为
。
当浮点数阶码大于最大阶码时,称为“上溢”,此时机器停止运算,进行中断溢出处理;当浮点数阶码小于最小阶码时,称为“下溢”,此时“溢出”的数绝对值很小,通常将尾数各位强置为零,按机器零处理,此时机器可以继续运行。
一旦浮点数的位数确定后,合理分配阶码和尾数的位数,直接影响浮点数的表示范围和精度。
通常对于短实数(总位数为32位),阶码取8位(含阶符1位),尾数取24位(含数符1位);对于长实数(总位数为64位),阶码取11位(含阶符1位),尾数取53位(含数符1位);对于临时实数(总位数为80),阶码取15位(含阶符1位),尾数取65位(含数符1位)。
3.浮点数的规格化
为了提高浮点数的精度,其尾数必须为规格化数。
如果不是规格化数,就要通过修改阶码并同时左右移尾数的办法,使其变成规格化数。
将非规格化数转换成规格化数的过程叫做规格化。
对于基数不同的浮点数,因其规格化数的形式不同,规格化过程也不同。
当基数为2时,尾数最高位为1的数为规格化数。
规格化时,尾数左移一位,阶码减1,(这种规格化叫做向左规格化,简称左规);尾数右移一位,阶码加1(这种规格化叫做向右规格化,简称右规)。
浮点数规格化后,其最大正数为
;最小正数为
;最大负数为
;最小负数为
。
当基数为4时,尾数的最高两位不全为零的数为规格化数。
规格化时,尾数左移两位,阶码减1;尾数右移两位,阶码加1。
当基数为8时,尾数的最高三位不全为零的数为规格化数。
规格化时,尾数左移三位,阶码减1;尾数右移三位,阶码加1。
同理类推,不难得到基数为16或2n时的规格化过程。
浮点机中一旦基数确定启就不再变了,而且基数是隐含的,故不同基数的浮点数其表示形式完全相同。
但基数不同,对数的表示范围和精度等都受影响。
一般来说,基数r越大,可表示的浮点数范围越宽,而且所表示的数其个数越多。
但r越大,浮点数的精度反而下降。
如r=16的浮点数,因其规格化数的尾数最高三位可能出现零,故与其尾舞位数相同的r=2的浮点数相比,后者可能比俞者多三位精度。
三、定点数和浮点数的比较
定点数和浮点数可从如下几个方面进行比较:
(1)当浮点机和定点机中的数其位数相同时,浮点数的表示范围比定点数大得多。
(2)当浮点数为规格化数财,其精度远比定点数高。
(3)浮点数运算要分阶码部分和尾数部分,而且运算结果都要求规格化,故浮点运算步骤比定点运算步骤多,运算速度比定点低,运算线路比定点复杂。
(4)在溢出的判断方法上,浮点数是对规格化数的阶码进行判断,而定点数是对数值本身进行判断。
如小数定点机中的数其绝对值必须小于1,否则即“溢出”,此时要求机器停止运算,进行处理。
为了防止溢出,上机前必须选择比例因子,这个工作比较麻烦,给编程带来不便。
而浮点数的表示范围远比定点数大,仅当“上溢”时机器才停止运算,故一般不必考虑比例因子的选择。
总之,浮点数在数的表示范围、数的精度、溢出处理和程序编程方面(不取比例因子)均优于定点数。
但在运算规则、运算速度及硬件成本方面又不如定点数。
因此,究竟选用定点数还是浮点数,应根据具体应用综合考虑。
一般来说,通用的大型计算机大多采用浮点数,或同时采用定、浮点数;小型、微型及某些专用机、控制机则大多采用定点数。
当需要作浮点运算时,可通过软件实现,也可外加浮点扩展硬件(如协处理器)来实现。
四、举例
例:
将十进制数+13/128写成二进制定点数和浮点数(数值部分取10位,阶码部分取4位,阶符和数符各取1位),分别写出它在定点机和浮点机中的机器数形式。
解:
令x=+13/128
其二进制形式:
x=0.0001101000
定点数形式:
x=0.0001101000
浮点数规格化表示:
x=0.1101000000×2-11
定点机中[x]原=[x]补=[x]反=0.0001101000
浮点机中[x]原:
1,0011;0.1101000000
[x]补:
1,1101;0.1101000000
五、IEEE754标准
在IEE754浮点数标准中,定义的浮点数的格式如下表所示。
其中浮点数编码有32位、64位和80位三种格式,分别称为短实数、长实数和临时实数,短实数和长实数又分别称为单精度数和双精度数。
浮点数
符号位
阶码
尾数
总位数
短实数
长实数
临时实数
1
1
1
8
11
25
23
52
64
32
64
80
在IEE754浮点数标准中,符号位s仍然用0表示正数,用1表示负数。
正常数的阶码取值e的范围为1~254,尾数部分可以取任意的二进制数值f。
这样,单精度数所表示的数值为:
从中我们可以发现,IEEE754标准将一般规格化数中位于小数点后的1移到了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 加减乘除