版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/2/6
©第8版2012.091第2章计算机中数据信息的表示
2023/2/62计算机内部信息信息控制信息数据信息指令控制字数值型数据非数值型数据定点数浮点数数字串字符与字符串汉字与汉字串2023/2/63本章学习内容计算机中数制与数制转换方法计算机中数值数据的表示机器数的概念原码、补码、反码、移码表示及运算方法数的定点与浮点表示及运算方法非数值数据的表示十进制数串的表示数据校验码2023/2/642.1数制与数制转换任何R进制数N均可表示为R:R进制的基数,表示数列中各位数字xi(-m≤i≤n-1)的取值范围是0~R-1,并且计数规则是“逢R进一”。Ri:位权值,xiRi表示xi在数列中所代表的实际数值。任何进位计数制都具有两个基本因素:基值和位权值。2023/2/65二进制数字:0,1进位方式:逢二进一后缀:B如10100011B八进制数字:0,1,2,3,4,5,6,7进位方式:逢八进一后缀:O或Q如137.67Q计算机中常用进位计数制2023/2/66十进制数字:0,1,2,3,4,5,6,7,8,9进位方式:逢十进一后缀:D或无如1357.26十六进制数字:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F进位方式:逢十六进一后缀:H如19BF.36EH2023/2/671.任意进制数转换为十进制数方法:按权相加。即利用按位展开公式将系数与位权值相乘后求和。例2.2将二进制数110011.101转换为十进制数。解:利用按权展开多项式,采用“按权相加”的方法进行转换。(110011.101)2=25+24+21+20+2-1+2-3
=32+16+2+1+0.5+0.125=(51.625)102023/2/68例
将八进制数263.56转换为十进制数。(263.56)8
=2×82+6×81+3×80+5×8-1+6×8-2
=128+48+3+0.625+0.09375
=(179.71875)10例
将十六进制数B3.B8转换为十进制数。(B3.B8)16
=B×161+3×160+B×16-1+8×16-2
=11×161+3×160+11×16-1+8×16-2
=176+3+0.6875+0.03125
=(179.71875)102023/2/692.十进制数转换为任意进制数数制转换原则:两个有理数相等⇒这两个有理数的整数部分、小数部分分别相等。进行不同数制之间的转换时要求:整数部分、小数部分分别进行转换2023/2/610数制转换方法整数部分:除基取余①把被转换的十进制整数除以基数R,取其余数即为R进制整数的最低位的数字。②再用基数R去除前次所得的商,所得余数即为R进制整数相应位的数字。③重复②,直到商为0为止。2023/2/611数制转换方法小数部分:乘基取整①把被转换的十进制小数乘以基数R,取乘积的整数部分作为R进制小数的最高位的数字。②再用基数R乘前一步乘积的小数部分,取新的乘积的整数部分为R进制小数相应位的数字。③重复②,直到乘积的小数部分为0。或求得所要求的位数为止。2023/2/612例
将(116.8125)10转换为二进制数。整数部分
21160…余数
2580
2291
2140
271
231
211
0(116)10=(1110100)22023/2/613小数部分
0.8125
×2
1.6250
×2
1.2500
×2
0.5000
×2
1.0000
(0.8125)10=(0.1101)2(116.8125)10=(1110100.1101)22023/2/614例
将(233.8125)10转换为十六进制数。整数部分
162339
161414
0
小数部分
0.8125
×16
13.0000(233.8125)10=(E9.D)162023/2/6153.二、八、十六进制数之间的转换因为16=24,8=23二进制数与八进制数之间的转换方法:整数部分从最低有效位开始,每三位二进制数对应一位八进制数,不足三位高位补“0”。小数部分从最高有效位开始,每三位二进制数对应一位八进制数,不足三位,低位补“0”。二进制与十六进制数间的转换方法:整数部分从最低有效位开始,每四位二进制数对应一位十六进制数,不足四位高位补“0”。小数部分从最高有效位开始,每四位二进制数对应一位十六进制数,不足四位,低位补“0”。2023/2/616例
将(1011100.10111)2转换为八进制和十六进制数。
001011100.101110134.56(1011100.10111)2=(134.56)801011100.101110005C.B8(1011100.10111)2=(5C.B8)162023/2/617计算机中的数据表示数据表示能够由计算机硬件直接识别的数据类型,如定点数、浮点数等。硬件直接识别即某种数据类型可用计算机硬件直接表示出来,并能用计算机指令直接调用。2023/2/618数据表示(取值范围、精度、类型)影响计算机性能的全局性问题直接影响算法的选择、硬件结构与组成随硬件技术和应用需求而变化和发展是复杂的系统设计问题2023/2/6192.2.1机器数与真值由于计算机中的硬件电路只能直接表示和处理二进制数,所以需要研究带符号数的符号和小数点在计算机中如何表示。1.机器数采用二进制表示形式的连同数符一起代码化了的数据,在计算机中统称为机器数或机器码。机器数是数在计算机中的二进制表示形式。2.
真值与机器数对应的用正、负符号加绝对值表示的实际数值称为真值。2.2带符号数的表示2023/2/620⑴数的符号二进制代码化。
“0”代表+,“1”代表-,且放在数据的最高位。⑵小数点本身是隐含的,不占用存储空间。⑶每个机器数数据所占的二进制位数受机器硬件规模的限制,与机器字长有关。超过机器字长的数值要舍去。3.机器数的特点2023/2/621机器数可分为无符号数:机器字长的所有二进制位均表示数值带符号数:数值部分和符号均用二进制代码表示
例:8位机器数为:11011011
若为无符号整数,则11011011表示二进制整数。
其真值为11011011=(219)10
若为带符号整数,则最高位为符号,
11011011表示二进制整数-1011011
其真值为-1011011=(-91)102023/2/622机器数表示的数值是不连续的思考:机器数的表示范围例如:8位二进制无符号数可以表示256个数
00000000~11111111=0~28-18位二进制带符号数可以表示-127~127,共256个数。
11111111~10000000,00000000~01111111即-1111111~-0和+0~+1111111。其中:10000000表示-0,00000000表示+02023/2/623Pentium的整数数据表示无符号二进制数的数据表示7015031063000H~0FFH0000H~0FFFFH00000000H~0FFFFFFFFH0000000000000000H~0FFFFFFFFFFFFFFFFH字节字双字四字2023/2/624Pentium的整数数据表示带符号二进制数的数据表示7015080H~7FH8000H~7FFFHSS31063080000000H~7FFFFFFFH8000000000000000H~7FFFFFFFFFFFFFFFHSS字节字双字四字2023/2/625如何知道计算机表示的数据是否带符号计算机在执行指令时,指令所处理的数据类型由指令操作码决定。2023/2/6262.2.2原码表示原码表示:保持原有的数值部分的形式不变,只将符号用二进制代码表示。原码表示是最简单的机器数表示方法。1.原码的定义纯小数原码定义:例:[0.10011001]原=0.10011001[-0.10011001]原=1.100110012023/2/627纯整数原码定义:式中n为除符号位以外的数值部分的位数
例
[10011001]原=010011001[-10011001]原=1100110012023/2/628例
设机器字长为8位,写出+0.375和
-0.6875的二进制原码表示。解:
(+0.375)10
=(0.011)2=(0.0110000)2[0.0110000]原=0.0110000(-0.6875)10=(-0.1011)2
=(-0.1011000)2[-0.1011000]原=1.10110002023/2/629例
设机器字长为8位,写出+37和-37的二进制原码,并用十六进制表示。解:
(+37)10=(100101)2=(00100101)2[00100101]原=00100101=25H(-37)10=(-100101)2=(-00100101)2[-00100101]原=10100101=A5H可见将[x]原的符号取反即可得到[-x]原2023/2/6302.原码中0
的表示原码中“0”有两种表示纯小数原码
[+0]原=0.00…0[-0]原=1.00…0纯整数原码
[+0]原=00…0[-0]原=10…02023/2/631对于纯小数,n+1位原码的表示范围:-0.111…11~+0.111…11n位n位即-(1-2-n)~(1-2-n)纯小数n+1位原码中有一位是符号对于纯整数,n+1位原码的表示范围:-111…11~+111…11n位n位即-(2n-1)~(2n-1)纯整数n+1位原码中有一位是符号3.原码的表数范围2023/2/632思考:n+1位的原码共可表示多少个数?2023/2/6334.原码的移位规则符号位不变,数值部分左移或右移,移出的空位填“0”。例:[0.0110000]原=0.0110000[0.0110000]原=0.00110002×[0.0110000]原=0.1100000
注意左移时不要将有效位移出,否则将会出错。2023/2/6345.原码的特点⑴
原码表示直观、易懂,与真值的转换容易。⑵
原码表示中0有两种不同的表示形式,给使用带来了不便。通常0的原码用[+0]原表示,若在计算过程中出现了[-0]原,则需要用硬件将[-0]原变为[+0]原。⑶
原码表示的加减运算复杂。2023/2/6352.2.3补码表示引入补码的目的是为了解决原码表示在加减运算时的不便。1.模的概念根据运算时“模”的概念
5-2=5+8=3(Mod10)对于某一确定的模,某数减去一个数,可以用加上那个数的负数的补数来代替。2023/2/636[x]补=M+x(ModM)当x≥0时,M+x大于M,把M丢掉,所以
[x]补=x,即正数的补数等于其本身。当x<0时,[x]补=M+x=M-|x|,所以负数的补数等于模与该数绝对值之差。2023/2/6372.补码的定义在计算机中,由于数据是用二进制编码表示的,所以把补数称为补码。对于纯小数表示,通常取模M=2对于纯整数表示,通常取模M=2n+1
(n为除符号位以外数值位的位数)2023/2/638纯小数的补码定义纯整数的补码定义2023/2/639例
(1)x=+0.1011[x]补=0.1011(2)x=-0.1011[x]补=2+x=10.0000-0.1011=1.0101(3)x=+1011[x]补=01011(4)x=-1011,[x]补=25+x=100000-1011=101012023/2/640补码中“0”的表示是唯一的[+0]补=[-0]补=0.00…0(纯小数)[+0]补=[-0]补=00…0(纯整数)3.特殊数的补码表示补码表示的最小数可以表示到-1或-2n对于纯小数[-1]补=2+(-1)=1.00…0(Mod2)对于纯整数[-2n]补=2n+1+(-2n)=100…0(Mod2n+1)2023/2/641因为补码可以表示-1(纯小数)和-2n(纯整数),所以补码的表数范围比原码大。[-1]补=1.00…0[-2n]补=100…0对于-1和-2n的补码,符号位上的1具有特殊意义,既表示符号也表示数值。补码中每一种编码都有独立的意义。对于n+1位补码,其表数范围为:纯小数-1~1-2-n
共2n+1个数纯整数-2n~2n-1共2n+1个数结论2023/2/6424.补码的简便求法
若x≥0,则[x]补=x,符号位为0若x<0,则将x的各位取反,然后在最低位上加1,符号位等于1,即得到[x]补。
例
若x=+0.1011001,则[x]补=0.1011001
若x=-0.1011001
则[x]补=1.0100110+0.0000001=1.0100111
若x=+1101010则[x]补=01101010
若x=-1101010则[x]补=100101102023/2/6435.补码的几何性质当n=3时,纯整数的补码为:2023/2/6442023/2/645①正数的补码就是其本身,负数的补码表示的实质是把负数映像到正值区域,因此加上一个负数或减去一个正数可以用加上另一个数(补码)来代替。②从表示符号的角度看,符号位的值代表了数的正确符号,0表示正数,1表示负数。从映像值来看,符号位的值是映像值的一个数位,因此在补码运算中,符号位与数值位一样参加运算。补码的几何性质说明了补码运算的基础。补码的几何性质
原码运算时符号位不能参加运算。注意2023/2/6465.补码的几个关系
1)补码与原码的关系若x≥0,则[x]补=[x]原若x<0,则将除符号位以外的[x]原各位取反(符号位不变),然后在最低位上加1,即得到[x]补。反之,将除符号位以外的[x]补的各位取反(符号位不变),然后在最低位上加1,即得到[x]原。补码中特殊数-1(纯小数)和-2n(纯整数)的表示,在原码中没有对应表示。注意2023/2/647例
⑴x=+0.1001100[x]原=0.1001100[x]补=0.1001100⑵x=-0.1001100[x]原=1.1001100[x]补=1.0110100⑶x=+1001100[x]原=01001100[x]补=01001100⑷x=-1001100[x]原=11001100[x]补=101101002023/2/6482)补码与机器负数的关系在补码运算中称[x]补为机器正数,[-x]补为机器负数。已知[x]补,求机器负数的方法:将[x]补的各位(含符号位)取反,然后在最低位上加1,即可得到[-x]补。反之亦然。求[-x]补,也称为对[x]补的求补。2023/2/649例
[x]补=1.0011010[-x]补=0.1100110[x]补=10110010[-x]补=010011102023/2/6503)补码的移位规则补码数右移规则:符号位不变,数值位各位向右移位,高位移空位置补与符号位相同的代码。补码的左移规则:连同符号位同时左移,低位移空位置补0。如果移位后符号位与移位前符号位不一致,说明移位出错,将有效位移出了。2023/2/651例[x]补=1.0011010[x]补=1.1001101[x]补=0.0110010[x]补=0.0011001[x]补=10110010[x]补=11011001[x]补=1.1111010[2x]补=1.1110100[x]补=10110010[2x]补=01100100出错!2023/2/6526.补码的模补码总是对确定的模而言的。如果补码运算结果超过了模,则模将自动丢失。补码运算在运算过程中,模不能改变。因为整数补码的模不同,所以不能将不同位数的补码直接进行运算。如需进行运算,需要进行符号扩展。例[x]补+[y]补=0110+1101=10011=0011[x]补+[y]补=11010111+1011
=11010111+11111011
=111010010=110100102023/2/6537.补码的特点⑴
在补码表示中,用符号位x0表示数值的正负,形式与原码表示相同,即0正1负。但补码的符号可以看作是数值的一部分参加运算。⑵
在补码表示中,数值“0”只有一种表示方法,即00…0。⑶
负数补码的表示范围比负数原码的表示范围略宽。纯小数的补码可以表示到“-1”,纯整数的补码可以表示到“-2n”。由于补码表示中的符号位可以与数值位一起参加运算,并且可以将减法转换为加法进行运算,简化了运算过程,因此计算机中均采用补码进行加减运算。2023/2/6542.2.4反码表示反码实质上是补码的一个特例,其特别之处在于反码的模比补码的模小一个最低位上的1。1.反码的定义
纯小数反码的定义(n为小数点后的数值位数)纯整数反码的定义(n为除符号外的数值位数)2023/2/6552.反码的求法若x≥0则[x]反=x,符号位为0若x<0,则将x的各位取反,符号位等于1,即得到[x]反。例x=+0.1001100则[x]反=0.1001100x=-0.1001100则[x]反=1.0110011x=+1001100则[x]反=01001100x=-1001100则[x]反=101100112023/2/6563.反码中“0”的表示反码中“0”有两种表示纯小数反码
[+0]反=0.00…0[-0]反=1.11…1纯整数反码
[+0]反=00…0[-0]反=11…12023/2/6574.反码的表数范围反码的表数范围与原码相同。在纯小数反码中不能表示“-1”在纯整数反码中不能表示“-2n”2023/2/658若x≥0,则[x]反=[x]原若x<0,则将除符号位以外的[x]原各位取反(符号位不变),即得到[x]反。若x<0,将除符号位以外的[x]反的各位取反(符号位不变),即得到[x]原。5.反码与原码的关系2023/2/6595.反码的特点⑴
在反码表示中,用符号位x0表示数值的正负,形式与原码表示相同,即0正1负。⑵
在反码表示中,数值0有两种表示方法。⑶
反码的表示范围与原码的表示范围相同。注意,纯小数的反码不能表示“-1”,纯整数的反码不能表示“-2n”。反码表示在计算机中往往作为数码变换的中间环节。2023/2/6602.2.5移码表示移码也称为增码、余码。在计算机中,移码主要用于表示浮点数的阶码。1.移码的定义
纯小数移码的定义
[x]移=1+x-1≤x<1纯整数移码的定义
[x]移=2n+x-2n≤x<2nn为除符号外的数值位数由于移码通常用于表示浮点数的阶码。所以主要考虑整数的移码表示。2023/2/661例
在字长为8位的机器中,[x]移=27+x设x=+1100101则[x]移=27+1100101=10000000+1100101
=11100101设x=-1100101则[x]移=27-1100101=10000000-1100101
=000110112023/2/662移码的几何性质当n=3时,纯整数的移码为:真值移码真值移码+000(+0)1000-001(-1)0111
+001(+1)1001-010(-2)0110
+010(+2)1010-011(-3)0101
+011(+3)1011-100(-4)0100
+100(+4)1100-101(-5)0011
+101(+5)1101-110(-6)0010
+110(+6)1110-111(-7)0001
+111(+7)1111-1000(-8)00002023/2/66301234567-1-2-3-4-5-6-7-80000001001001000101011001110011000010011010110011011110111110111移码的几何性质真值移码2023/2/664移码表示的实质是把真值映像到一个正数域,因此移码的大小可直观地反映真值的大小。不管正数还是负数,用移码表示时,都可以按无符号数比较大小。2023/2/6652.移码中“0”的表示移码中“0”的表示是唯一的[+0]移=[-0]移=10…0(纯整数)移码的表数范围与补码一致纯整数移码表示的最小数可以表示到-2n2023/2/6663.移码与补码的关系整数补码的数值部分不变,符号取反,即得整数移码。反之亦然。即:
x≥0时[x]移=[x]补+2nx<0时[x]移=[x]补-2n2023/2/6674.移码的特点
⑴设[x]移=x0x1x2…xn,符号位x0表示真值x的正负:x0=1,x为正;x0=0,x为负。⑵真值0的移码表示只有一种形式。⑶移码与补码的表示范围相同。纯小数的移码可以表示到“-1”,[-1]移=0.0…0;纯整数的移码可以表示到“-2n”,[-2n]移=00…0,n为数值部分的长度。⑷真值大时,对应的移码也大;
真值小时,对应的移码也小。2023/2/668特别要注意:当[x]移=0时,x为编码所能够表示的最小值。2023/2/6695.特殊的移码根据移码的几何性质,可以将移码的定义进行扩展,得到特殊的移码为:移码=K+实际数值K:约定的移数值例:移127码,移数值为127,即:移127码=127+实际数值2023/2/670例
求+12和-3的8位移127码的二进制编码形式。解:(+12)10=1100,
[+12]移127码=127+12=(139)10
=(1111111+1100)2
=(10001011)2(-3)10=11,
[-3]移127码=127-3=(124)10
=(1111111-11)2
=(01111100)22023/2/671不同码制之间的转换2023/2/672例
设某计算机的字长为8位,采用整数表示。求表中机器数在不同表示形式中对应的十进制真值。
表示方法机器数原码补码反码移码无符号数010010011010110111111111+73-45-127+73-83-1+73-82-0-55+45+127731732552023/2/673C语言中的整数类型C语言中的无符号整数的表示:Unsignedshort、Unsignedint(Unsigned)Unsignedlong等C语言中带符号整数采用补码表示:Short、int、long等常在数据的后面加一个“u”或“U”来表示无符号数。例:12345U、0x5B6Fu2023/2/674C语言中允许无符号整数与带符号整数之间的转换,转换后的数的真值是将原二进制机器数按转换后的数据类型重新解释得到。例:在32位机中,有以下C代码:1intx=-1
2Unsignedu=2147483648(即231)
3
4printf(“x=%u=%d\n,x,x)
5printf(“u=%u=%d\n,u,u)输出结果:x=4294967295=-1u=2147483648=-21474836482023/2/675x的输出结果中-1的补码整数表示为“111•••1”通过%d作为带符号数解释时,其值为“-1”通过%u作为无符号数解释时,在32位机中其值为:232-1=4294967295u的输出结果中231的无符号整数表示为“100•••0”通过%u作为无符号数解释时,其值为231“2147483648”通过%d作为带符号数解释时,其值为
“-2147483648”2023/2/676C语言中,如果在执行一个运算中有带符号整数与无符号数同时参加,则C编译器会隐含地将带符号整数强制类型转换为无符号数,因而会带来意想不到的结果。例:-2147483648==2147483648U结果为√∵无符号运算中100•••0B=100•••0B-2147483648<
2147483647U结果为×∵无符号运算中
100•••0B(231)>011•••1B(231-1)作业课后习题2.12.32.4(1)(3)2.6(1)(2)2.7自学2.4节2023/2/6772023/2/678本章学习内容计算机中数制与数制转换方法计算机中数值数据的表示机器数的概念原码、补码、反码、移码表示及运算方法数的定点与浮点表示及运算方法非数值数据的表示十进制数串的表示数据校验码2023/2/6792.3数的定点表示与浮点表示任何一个数均可表示为:
(N)R=±S×R±eR:基值。计算机中常用的R可取2、8、16等。S:尾数。代表数N的有效数字。计算机中一般表示为纯小数。e:阶码。代表数N的小数点的实际位置。一般表示为纯整数。例:(11011.101)2=0.11011101×25=0.11011101×2101=11011101×2-3=11011101×2-112023/2/6802.3.1定点表示定点表示:约定计算机中所有数据的小数点位置均是相同的而且是固定不变的。定点表示是一种阶码e的取值固定不变的机器数表示。当采用定点表示时,(N)R=±S×R±e中e的取值固定不变。定点数有两种表示方法:定点小数和定点整数。2023/2/6811.定点小数e=0,表示纯小数,约定小数点在符号位与最高数值位之间。定点小数的格式小数点(隐含表示)数符尾数xnxn-1
……x1x02023/2/6822.定点整数e=n,表示纯整数,约定小数点在最低有效数值位之后。定点整数的格式数符尾数xnxn-1
……x1x0小数点(隐含表示)2023/2/6833.定点数的表示范围设数据为N,机器字长为n+1,其中1位符号位,n位数值位。在不同的表示方法下,所能表示的数的范围不同。⑴原码表示二进制定点小数的表示范围为:
0≤︱N︱≤1-2-n二进制定点整数的表示范围为:
0≤︱N︱≤2n-12023/2/684机器数真值数符尾数(n位)定点小数定点整数最小正数000…01+2-n+1最大正数011…111-2-n2n-1最大负数100…01-2-n-1最小负数111…11-(1-2-n)-(2n-1)定点原码数的表示范围2023/2/685⑵反码表示定点反码数的表示范围与定点原码数的表示范围相同。定点反码表示的表示范围为:机器数真值数符尾数(n位)定点小数定点整数最小正数000…01+2-n+1最大正数011…111-2-n2n-1最大负数111…10-2-n-1最小负数100…00-(1-2-n)-(2n-1)2023/2/686⑶补码表示二进制定点小数的表示范围为:-1≤N≤1-2-n二进制定点整数的表示范围为:-2n≤N≤2n-12023/2/687定点补码数的表示范围机器数真值数符尾数(n位)定点小数定点整数最小正数000…01+2-n+1最大正数011…111-2-n2n-1最大负数111…11-2-n-1最小负数100…00-1-2n2023/2/688⑷移码表示定点移码数的表示范围与定点补码码数的表示范围相同。其表示范围为:机器数真值数符尾数(n位)定点小数定点整数最小正数100…01+2-n+1最大正数111…111-2-n2n-1最大负数011…11-2-n-1最小负数000…00-1-2n2023/2/689在补码和移码表示范围中,最小负数比原码和反码表示范围大一个数,定点小数为“-1”,定点整数为“-2n”。以定点整数为例,原码和补码表示范围的数轴表示形式为:0+12n-1-1-(2n-1)11…1110…0000…0010…0100…0101…11原码0+12n-1-1-(2n-1)10…0100…0011…1100…0101…11补码-2n10…002023/2/690从数轴中可见,最大负数到最小负数,最小正数到最大正数之间以及0,为机器数所能表达的数。0最小负数负数区机器零上溢区下溢区正数区上溢区最大负数最小正数最大正数2023/2/6913.定点数的分辨率
定点数在数轴上的分布是不连续的,定点数的分辨率是指相邻两个定点数之间的最小间隔。字长为n+1的定点小数的分辨率为2-n;字长为n+1的定点整数的分辨率为1。2023/2/6924.定点机的特点
硬件上只考虑定点小数或定点整数运算的计算机称为定点机。定点机的优点:运算简单,硬件结构比较简单。定点机存在的问题:⑴所能表示的数据范围小。⑵
使用不方便,运算精度较低。⑶
存储单元利用率低。2023/2/693比例因子的选择与溢出在定点运算中,参加运算的数据必须是定点小数或定点整数。因此在运算之前,必须选择一个恰当的比例因子,将所有参加运算的数均化成纯小数或纯整数,然后再进行运算。运算结果再根据所选的比例因子转换成正确的值。比例因子必须选择恰当。选择太大,将会影响运算精度;选择太小,会使运算结果超出机器所能表示的数据范围,即出现溢出。溢出:运算结果超出机器所能表示的数据范围。2023/2/694例
在定点小数机器中计算11.01+10.01选择比例因子2-2=0.01,可将两操作数变换为0.1101+0.1001但0.1101+0.1001=1.0110,运算结果不是纯小数,出现了机器数不能表示的数,即出现了正溢出。如果选择比例因子2-3=0.001,可将两操作数变换为0.01101+0.01001则运算结果0.01101+0.01001=0.10110为正常结果。将0.10110除以比例因子2-3,可得到正确结果101.102023/2/695定点机的数据存储单元的利用率往往很低。例如在采用定点小数的机器中,必须把所有参加运算的数据至少都除以这些数据中的最大数,才能把所有数据都化成纯小数,但这样可能会造成很多数据出现大量的前置0,从而浪费了许多存储单元。2023/2/696结论:定点表示计算简单,硬件实现容易。但数据表示范围小,比例因子选择困难,很难兼顾数值范围和精度的要求,不适合科学计算。怎么办?2023/2/6972.3.2浮点表示浮点表示:是指各个数的小数点位置不是固定不变的,而是可以浮动的。即(N)R=±S×R±e中的e值是可变的。由于e的取值可变,因此在机器中必须将e表示出来。2023/2/6981.浮点表示的数据格式浮点数由阶码和尾数两部分组成。阶码:表示数的小数点实际位置。尾数:表示数的有效数字。尾数的基数R是设计者约定的,用隐含方法表示。通常取R=2,也可以采用4、8、16进制。阶码均采用2为基数。浮点数的表示格式中,包括1位数符、用n位纯小数表示的尾数部分、1位阶符和用m位纯整数表示的阶码部分。数符阶符阶码尾数1位1位m位n位2023/2/699浮点数的两种表示格式在实际机器中,通常都采用后一种表示格式。2023/2/61002.浮点数的规格化表示数据采用浮点表示时,存在两个问题:⑴如何尽可能多地保留有效数字;⑵如何保证浮点表示的唯一。
例0.001001×25有多种表示:0.001001×25=0.100100×23=0.00001001×27所以在浮点表示下的代码不唯一。若规定尾数的位数为6位,则采用0.00001001×27就变成了0.000010×27,丢掉了有效数字,减少了精度。因此为了尽可能多地保留有效数字,应采用0.100100×23的表示形式。2023/2/6101浮点数采用规格化表示方法的目的:⑴提高运算精度,充分利用尾数的有效数位,尽可能占满位数,以保留更多的有效数字。⑵保证浮点数表示的唯一性。例
0.100100×23=0.001001×25为达到上述目的,需要尽可能去掉尾数中的前置“0”
。即尽量使小数点后第一位为“1”。对于二进制数,就是要满足2023/2/61023.规格化数的定义原码表示的规格化数若[S]原=Sf.S1S2…Sn,则满足的数为规格化数。对于[S]原=Sf.S1S2…Sn,其规格化标志是:
S1=1即:[S]原=0.1xx…x或[S]原=1.1xx…x
例[S]原=0.1101101、[S]原=1.1101101是规格化数
[S]原=0.0101101、[S]原=1.0101101不是规格化数2023/2/6103补码表示的规格化数若[S]补=Sf.S1S2…Sn,则满足
和的数为规格化数。对于[S]补=Sf.S1S2…Sn,其规格化标志是:
Sf⊕S1=1即:[S]补=0.1xx…x或[S]补=1.0xx…x考虑:-1/2,-1,1/2是不是规格化数?2023/2/6104注意:补码表示的规格化数中,
不是规格化数,而-1是规格化数。因为=-0.1,写成补码为1.1,不符合规格化规定,所以不是规格化数。-1的补码是1.000,符合规格化规定,所以-1是规格化数。例
[S]补=0.1101101、[S]补=1.0101101是规格化数[S]补=0.0101101、[S]补=1.1101101不是规格化数2023/2/61053.浮点数的表示范围要求浮点数的表示范围,实质是求出浮点数所能表示的最小负数、最大负数,最小正数和最大正数这四个典型数据。2023/2/6106设浮点数的格式为:数符阶符阶码尾数1位1位m位n位2023/2/6107阶码和尾数均用原码表示时的浮点数表示范围数符阶符阶码(m位)尾数(n位)真值非规格化最小正数0111…1100…01规格化最小正数0111…1110…00最大正数0011…1111…11非规格化最大负数1111…1100…01规格化最大负数1111…1110…00最小负数1011…1111…112023/2/6108阶码和尾数均用补码表示时的浮点数表示范围数符阶符阶码(m位)尾数(n位)真值非规格化最小正数0100…0000…01规格化最小正数0100…0010…00最大正数0011…1111…11非规格化最大负数1100…0011…11规格化最大负数1100…0001…11最小负数1011…1100…002023/2/6109阶码用移码,尾数用补码表示时的浮点数表示范围数符阶符阶码(m位)尾数(n位)真值非规格化最小正数0000…0000…01规格化最小正数0000…0010…00最大正数0111…1111…11非规格化最大负数1000…0011…11规格化最大负数1000…0001…11最小负数1111…1100…002023/2/61104.浮点表示中阶码与尾数位数的选择在浮点数表示中尾数的位数决定了数据表示的精度。增加尾数的位数可增加有效数字位数,即提高数据表示精度。阶码的位数决定了数据表示的范围。增加阶码的位数,可扩大数据表示的范围。因此当字长一定的条件下,必须合理地分配阶码和尾数的位数,以满足应用的需要。2023/2/6111为了得到较高的精度和较大的数据表示范围,在很多机器中都设置单精度浮点数和双精度浮点数等不同的浮点数格式。单精度浮点数就是用一个字长表示一个浮点数。双精度浮点数是用二个字长表示一个浮点数。2023/2/6112例32位的VAX-11机的浮点数格式单精度浮点数——
F浮点双精度浮点数——
D浮点数符阶码尾数1位8位23位数符阶码尾数1位8位55位32位64位2023/2/6113G浮点H浮点数符阶码尾数1位11位52位数符阶码尾数1位15位112位64位128位2023/2/6114(1)尾数S=0,浮点数N=S×Re,对所有e值,有N=0×Re=0(2)当E<-2n,无论S等于多少,数据N都小于机器所能表示的最小数,即出现浮点数下溢,机器通常用N=0来处理,即当作机器零。机器零5.
浮点数的机器零问题2023/2/6115浮点数的阶码采用移码表示时的机器零当浮点数的阶码采用移码表示、尾数采用补码表示时,如果阶码为它所能表示的最小数-2m(m为阶码的位数)且尾数为0时,其阶码的表现形式全为0,尾数的表现形式也为全0,这时机器零的表现形式为000…00。这种全0表示,有利于简化机器中的判“0”电路。2023/2/6116例:阶码用移码,尾数用补码表示非规格化最小正数:0
000…0000…01
规格化最小正数:0
000…0010…00比上述数据小的数都将被视为机器零。2023/2/61176.IEEE754浮点数标准二进制浮点数的表示,由于不同机器所选用的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,这就不利于软件在不同计算机间的移植。美国IEEE(电气及电子工程师协会)为此提出了一个从系统结构角度支持浮点数的表示方法,称为IEEE标准754(IEEE,1985),当今流行的计算机几乎都采用了这一标准。2023/2/6118IEEE754标准在表示浮点数时,每个浮点数均由三部分组成:符号位S,指数部分E和尾数部分M。浮点数可采用以下四种基本格式:(1)单精度格式(32位):E=8位,M=23位。(2)扩展单精度格式:E≥11位,M=31位。(3)双精度格式(64位):E=11位,M=52位。(4)扩展双精度格式:E≥15位,M≥63位。SEM数符指数尾数2023/2/6119IEEE754单精度浮点数格式目前广泛采用的IEEE754浮点数据编码标准中,32位单精度浮点数表示格式为:
在IEEE754标准中由32位单精度所表示的浮点数N的数值为:
1位8位23位SEM数符指数尾数2023/2/6120S:数符,0表示“+”,1表示“-”。E:指数即阶码部分。其中包括1位阶符和7位数值。采用移127码,移码值为127。即阶码=127+实际指数值规定阶码的取值范围为1~254,阶码值255和0,用于表示特殊数值。M:共23位。由于尾数采用规格化表示,所以IEEE754标准约定在小数点左部有一位隐含位为1,从而使尾数的实际有效位为24位,即尾数的有效值为1.M。
2023/2/6121IEEE754标准32位单精度浮点数N的解释如下:若E=0,且M=0,则N为0。若E=0,且M≠0,则N=(-1)S·2-126·(0.M)。为非规格化数。若1≤E≤254,则N=(-1)S·2E-127·(1.M)。为规格化数。若E=255,且M≠0,则N=NaN(“非数值”)。若E=255,且M=0,则N=(-1)S∞(无穷大)。2023/2/6122对于绝对值较小的数,为了避免下溢而损失精度,允许采用比最小规格化数还要小的非规格化数来表示。注意:非规格化数和正、负零的尾数隐含值不是“1”而是“0”。2023/2/61231.阶码为全0,尾数为全0
可以表示+0和-0,使0有了精确的表示。2.阶码为全0,尾数不为全0
可以表示非规格化数,表示32位单精度非规格化浮点数,此时的阶码为-126,且隐含位为0。3.阶码不为全0和全1
可以表示非0规格化浮点数。4.阶码为全1,尾数为全0
可以明确地表示+∞和-∞,使计算过程中出现异常时程序也能进行下去。操作数为∞时的处理:
⑴产生明确结果
如a/0(a≠0)=±∞、3+(+∞)=+∞。
⑵产生不发信号的非数值NaN
如+∞+(-∞)、∞/∞2023/2/61245.阶码为全1,尾数不为全0
表示非数值NaN(NotaNumber)分为不发信号(quiet)和发信号(signaling)的非数值,也称“静止的NaN”和“通知的NaN”。当尾数最高有效位为1时为不发信号(静止的)NaN,当结果产生这种NaN时,不发例外通知,即可不进行异常处理;
当尾数最高有效位为0时为发信号(通知的)NaN,当结果产生这种NaN时,则发一个异常操作例外通知,表示要进行异常处理。
2023/2/6125IEEE754单精度浮点数的特征特征符号位1指数位8尾数位23总位数32指数系统移码127指数取值范围-126~+127最小规格化正数2-126最大规格化正数?2+128-1or2+128十进制范围10-38~+10+38最小非规格化数10-452023/2/6126例
将5/32及-4120表示成IEEE754单精度格式,并用十六进制书写。解:(1)(5/32)10=(0.00101)2=1.01×2-3按IEEE754单精度格式得:S=0M=01000…00E=127+(-3)=124=(01111100)2其机器数表示形式为:00111110001000000000000000000000十六进制形式:3E200000H2023/2/6127(2)(-4120)10=-1000000011000
=-1.000000011×212
S=1M=000000011…00E=127+12=139=(10001011)2其机器数表示形式为:11000101100000001100000000000000十六进制形式:C580C000H注意:在IEEE754单精度格式中尾数默认小数点前为1,即真正的尾数为1.M。阶码为移127码,所以阶码=127+实际指数值。2023/2/6128思考:将十六进制的IEEE单精度浮点数代码42E48000转换成十进制数值表示42E48000=01000010111001001000000000000000按IEEE754标准可写成:01000010111001001000000000000000其中符号位s=0,阶码部分值e=133,尾数部分
f=0.78515625,根据IEEE754标准的表示公式,得:(-1)0×(1+0.78515625)×2133-127=1.78515625×26=114.252023/2/6129IEEE754双精度浮点数格式64位双精度浮点数表示格式为:
由64位双精度所表示的浮点数N的数值为:
1位11位52位SEM数符指数尾数2023/2/6130IEEE754双精度浮点数的特征特征符号位1指数位11尾数位52总位数32指数系统移码1023指数取值范围-1022~+1023最小规格化数2-1022最大规格化数?2+1024-1or2+1024十进制范围10-308~+10+308最小非规格化数10-3242023/2/6131C语言中的浮点数类型C语言中浮点数的表示:float:对应IEEE754单精度浮点数格式double:对应IEEE754双精度浮点数格式longdouble:对应IEEE754扩展双精度浮点数格式,但其长度和格式随编译器和处理器的不同而有所不同。2023/2/6132在int、float、double之间进行转换的结果:(以int为32位为例)⑴从int转换为float时,结果不会溢出,但可能有数据被舍入。⑵从int或float转换为double时,因为double的有效位数更多,故能保留精确值。⑶从double转换为float时,因为float的表数范围小,故可能发生溢出。由于float的有效位数少,故可能有数据被舍入。⑷从float或double转换为int时,因为int没有小数,故可能丢失有效数据。因为int的表数范围小,故可能发生溢出。2023/2/6133例:设变量i、f、d的类型分别是int、float、double,它们的取值是除+∞、-∞、NaN以外的任意值。请判断下列每个C语言关系表达式在32位机上运行时是否永真。⑴i==(int)(float)i
×
∵某种程度上int精度比float高,∴当i转换为float再转换为int时,可能丢失有效位数。⑵f==(float)(int)f×
∵float有小数部分,∴当f转换为int再转换为float时,可能丢失小数部分。2023/2/6134⑶i==(int)(double)i√∵double比int精度高范围大,∴当i转换为double再转换为int时,数值不变。⑷f==(float)(double)f√∵double比float精度高范围大,∴当f转换为double再转换为float时,数值不变。⑸d==(float)d×∵double比float精度高范围大,∴当d转换为float时,数值可能改变。2023/2/6135⑹f==-(-f)√∵浮点数取负就是简单地将数符取反。⑺(d+f)-d==f×∵double比float精度高范围大,∴当d与f进行计算时,有可能因为对阶的原因使f的有效位丢失,而使计算出现误差。例如当d=1.79×10308,f=1.0时,左边的的计算由于(d+f)的对阶,而使f=0,因此结果为0,但右边结果为1。2023/2/61362.3.3定点表示与浮点表示的比较1.在字长相同的条件下,浮点表示的数据范围大、精度高。例:对于数据N,设机器字长为16位,补码表示。当采用定点整数表示时,有1位数符,15位尾数;采用浮点数表示时,有1位数符,1位阶符,3位阶码,11位尾数。定点整数的表示范围-215≤N≤-1和+1≤N≤215-1浮点数的表示范围-1×27≤N≤-2-11×2-8
和2-11×2-8≤N≤(1-2-11)×27由于浮点数运算中随时对中间结果进行规格化处理,所以减少了有效数字的丢失,提高了运算精度。2023/2/61372.浮点运算算法复杂,所需设备量大,运算速度慢。定点数小数点固定,可以直接运算。而浮点数运算需要进行对阶(对齐小数点)与规格化,既有尾数运算又有阶码运算,算法复杂,因此所需设备量大,线路复杂,运算速度也比定点数运算慢。数据表示是计算机系统结构设计的重要问题,同时也是算法设计的重要问题。2023/2/6138计算机内部信息信息控制信息数据信息指令控制字数值型数据非数值型数据定点数浮点数数字串字符与字符串汉字与汉字串2023/2/61392.4非数值型数据的表示为了处理非数值领域的问题,需要在计算机中引入文字、字母及一些专用符号等,以便表示文字语言、逻辑语言等信息。但由于计算机硬件能够直接识别和处理的只是“0”、“1”二进制信息,因此在计算机中对这类数据必须用二进制代码来表示。
非数值型数据表示:逻辑数、字符、字符串、文字及某些专用符号等的二进制代码。这些二进制代码并不表示数值,所以称为非数值型数据或符号数据。2023/2/61402.4.1逻辑数——
二进制串在计算机中一个逻辑数是用一个二进制串来表示的。逻辑数具有下面几个特点:(1)逻辑数没有符号的问题。逻辑数中各位之间是相互独立的,既没有位权问题,也没有进位问题。(2)逻辑数中的“0”与“1”不代表值的大小,仅代表一个命题的真与假、是与非等逻辑关系。(3)逻辑数只能参加逻辑运算,并且是按位进行的。
例2.321011+1100=11112023/2/61412.4.2字符与字符串字符与字符串数据是计算机中用得最多的符号数据,它是人和计算机联系的桥梁。为使计算机硬件能够识别和处理字符,必须对字符按一定规则用二进制编码。目前广泛使用的是ASCII码(美国国家信息交换标准字符码)和EBCDIC码(扩展的二—十进制交换码)。2023/2/61421.字符编码
ASCII码是用七位二进制表示一个字符,它包括10个数字(0~9),52个英文大、小写字母(A~Z,a~z),33个专用字符(如,、%、#等)和33个控制字符(如NUL、LF、CR、DEL等)共128个字符。ASCII字符编码符号的排列次序为b6b5b4b3b2b1b0,其中b6b5b4为高位部分,b3b2b1b0为低位部分。2023/2/61432023/2/6144NUL空VT垂直制表SOH标题开始FF换页STX文本起始CR回车ETX文本结束SO移位输出EOT传输结束SI移位输入ENQ询问SP空间(空格)ACK应答(肯定)DLE数据连接断开
BEL响铃DCl设备控制1BS退一格DC2设备控制2HT水平制表符DC3设备控制3LF换行
DC4设备控制4SYN空转同步NAK反向应答(否定)ETB信息组传送结束FS文件分隔符CAN作废GS组分隔符EM纸尽RS记录分隔符SUB取代
US单元分隔符ESC中断DEL作废2023/2/6145在计算机中,通常用一个字节表示一个字符。由于ASCII编码为七位二进制,字节的最高位的作用:①用作奇偶校验位,用来检测错误。②用于表示字符,形成扩展的ASCII码。如EBCDIC码。EBCDIC(EstendedBinaryCodedDecimalInterchangeCode)是IBM公司常用的一种字符编码。它采用八位二进制数表示一个字符。③在我国用于区分汉字和字符。如规定字节的最高位为“0”表示ASCII码,为“1”表示汉字编码。2023/2/61462.字符串数据字符串:连续的一串字符。通常一个字符串占用主存中多个连续的字节进行存放。字节1字节2字节LA+0A+1A+L-1┇┇2023/2/61472.4.3汉字信息的表示为使计算机能够处理各种汉字信息,必须对汉字进行编码。汉字在计算机中的表示比较特殊。因为在计算机中使用汉字,需要涉及到汉字的输入,存储与处理、汉字的输出等几方面的问题,因此汉字的编码也有多种类型。汉字输入码汉字机内码汉字交换码汉字字形码存储处理键盘输入交换汉字信息显示、打印2023/2/6148汉字处理过程在汉字信息处理系统中,人们使用键盘把汉字以汉字输入码的形式输入到计算机内,将其变换成计算机内部表示的汉字机内码,进行存储和处理。处理结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论