2019/10/10©2006张功萱、顾一禾、王晓峰修订1第2章计算机中数据信息的表示2019/10/102本章学习内容•计算机中数制与数制转换方法•机器数的概念•原码、补码、反码、移码表示及运算方法•数的定点与浮点表示及运算方法•非数值数据的表示•十进制数串的表示•数据校验码2019/10/103计算机内部信息信息控制信息数据信息指令控制字数值型数据非数值型数据定点数浮点数数字串字符与字符串汉字与汉字串2019/10/1042.1数制与数制转换•任何R进制数N均可表示为(N)R=K0R-m+K-(m-1)R-(m-1)+…+K0R0+K1R1+…+KnRn=•R:基值。表示系数Ki可以取0,1,…,R-1共R个数字并且是逢R进一的。•Ri:位权值。KiRi表示Ki在数列中所代表的实际数值。•任何进位计数制都具有两个基本因素:基值和位权值。n-miiiRK2019/10/105•计算机中常用进位计数制•二进制•数字:0,1•进位方式:逢二进一•后缀:B如10100011B•八进制•数字:0,1,2,3,4,5,6,7•进位方式:逢八进一•后缀:O或Q如137.67Q2019/10/106•十进制•数字: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.36EH2019/10/107数制转换原则:•两个有理数相等=•这两个有理数的整数部分、小数部分分别相等,•因此,整数部分、小数部分分别进行转换2019/10/1081.任意进制数转换为十进制数•方法:按权相加。即利用按位展开公式将系数与位权值相乘后求和。•例1.将二进制数10110011.10111转换为十进制数。•(10110011.10111)2=27+25+24+21+20+2-1+2-3+2-4+2-5=128+32+16+2+1+0.5+0.125+0.0625+0.03125=(179.71875)102019/10/109•例2.将八进制数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•例3.将十六进制数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)102019/10/10102.十进制数转换为任意进制数•整数部分:除基取余•①把被转换的十进制整数除以基数R,取其余数即为R进制整数的最低位的数字。•②再用基数R去除前次所得的商,所得余数即为R进制整数相应位的数字。•③重复②,直到商为0为止。•小数部分:乘基取整•①把被转换的十进制小数乘以基数R,取乘积的整数部分作为R进制小数的最高位的数字。•②再用基数R乘前一步乘积的小数部分,取新的乘积的整数部分为R进制小数相应位的数字。•③重复②,直到乘积的小数部分为。或求得所要求的位数为止。2019/10/1011•例3.将(233.8125)10转换为二进制数。•整数部分22331…余数211602580229121402712312110•(233)10=(11101001)22019/10/1012•小数部分•0.8125×21.6250×21.2500×20.5000×21.0000•(0.8125)10=(0.1101)2•(233.8125)10=(11101001.1101)22019/10/1013•例4.将(233.8125)10转换为十六进制数。•整数部分•1623391614140•小数部分•0.8125×164.8750×1613.0000•(233.8125)10=(E9.D)162019/10/10143.二、八、十六进制数之间的转换•因为16=24,8=23•二进制数与八进制数之间的转换方法:•整数部分从最低有效位开始,每三位二进制数对应一位八进制数,不足三位高位补“0”。•小数部分从最高有效位开始,每三位二进制数对应一位八进制数,不足三位,低位补“0”。•二进制与十六进制数间的转换方法:•整数部分从最低有效位开始,每四位二进制数对应一位十六进制数,不足四位高位补“0”。•小数部分从最高有效位开始,每四位二进制数对应一位十六进制数,不足四位,低位补“0”。2019/10/1015•例5.将转换(1011100.10111)2为八进制和十六进制数。•001011100.101110•134.56•(1011100.10111)2=(134.56)8•01011100.10111000•5C.B8•(1011100.10111)2=(5C.B8)162019/10/1016•2.2.1机器数与真值•由于计算机中的硬件电路只能直接表示和处理二进制数,所以需要研究带符号数的符号和小数点在计算机中如何表示。•1.机器数•数在计算机中的二进制表示形式。机器数的数值部分和符号均用二进制代码表示。•2.真值:机器数按一般表示方法所表示的数值2.2带符号数的表示2019/10/1017•3.机器数的特点:•⑴数的符号二进制代码化。“0”代表+,“1”代表-,且放在数据的最高位。•⑵小数点隐含在数据的某一固定位置上,不占用存储空间。•⑶每个机器数数据所占的二进制位数受机器硬件规模的限制,与机器字长有关。超过机器字长的数值要舍去。2019/10/1018•机器数可分为•无符号数:机器字长的所有二进制位均表示数值•带符号数:数值部分和符号均用二进制代码表示•例:8位机器数为:11011011•若为无符号整数,则11011011表示二进制整数。其真值为11011011=(219)10•若为带符号整数,则最高位为符号,11011011表示二进制整数-1011011其真值为-1011011=(-91)102019/10/1019•机器数表示的数值是不连续的•例如:•8位二进制无符号数可以表示256个数00000000~11111111=0~28-1•8位二进制带符号数可以表示-127~127,共256个数。11111111~10000000,00000000~01111111•即-1111111~0和0~+1111111,其中00000000表示+0,10000000表示-02019/10/10202.2.2原码表示•原码表示:保持原有的数值部分的形式不变,只将符号用二进制代码表示。•原码表示是最简单的机器数表示方法。•纯小数原码定义:•例:[0.10011001]原=0.10011001•[-0.10011001]原=1.100110010x1-x1x-11x0x[x]=原2019/10/1021•纯整数原码定义:•式中n为除符号位以外的数值部分的位数•例:[10011001]原=010011001•[-10011001]原=1100110010x2-x2x-2x0x[x]nnnn2=原2019/10/1022•例:设机器字长为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.10110002019/10/1023•例:设机器字长为8位,写出+37和-37的二进制原码表示。•解:•(+37)10=(100101)2=(00100101)2•[00100101]原=00100101=25H•(-37)10=(-100101)2=(-00100101)2•[-00100101]原=10100101=A5H•可见将[x]原的符号取反即可得到[-x]原2019/10/1024原码中0的表示•原码中“0”有两种表示•纯小数原码[+0]原=0.00…0[-0]原=1.00…0•纯整数原码[+0]原=00…0[-0]原=10…02019/10/1025•对于纯小数,n+1位原码的数据表示范围:•-0.111…11~+0.111…11•n位n位•即-(1-2-n)~(1-2-n)•纯小数n+1位原码中有一位是符号•对于纯整数,n+1位原码的数据表示范围:•-111…11~+111…11•n位n位•即-(2n-1)~(2n-1)•纯整数n+1位原码中有一位是符号原码的范围2019/10/1026•因为原码中“0”有两种表示方式,所以n+1位原码共可表示2n+1-1个数2019/10/1027原码的移位规则•符号位不变,数值部分左移或右移,移出的空位填“0”。•例:[0.0110000]原=0.0110000•[0.0110000]原=0.0011000•2×[0.0110000]原=0.1100000•左移时注意不要将有效位移出,否则将会出错。212019/10/10282.2.3补码表示•引入补码的目的是为了解决原码表示在加减运算时的不便。•根据运算时“模”的概念•5-2=5+8=3(Mod10)•对于某一确定的模,某数减去一个数,可以用加上那个数的负数的补数来代替。•[x]补=M+x(ModM)•当x≥0时,M+x大于M,把M丢掉,所以[x]补=x,即正数的补数等于其本身。•当x<0时,[x]补=M+x=M-|x|,所以负数的补数等于模与该数绝对值之差。2019/10/1029补码的定义•在计算机中,由于数据是用二进制编码表示的,所以把补数称为补码。•对于纯小数表示,通常取模M=2•对于纯整数表示,通常取模M=2n+1(n为除符号位以外数值位的位数)•纯小数的补码定义2)(Mod0x1-x21x0x[x]=补2019/10/1030•纯整数的补码定义•例:x=+0.1011,[x]补=0.1011•例:x=-0.1011,•[x]补=10+x=10.0000-0.1011=1.0101•例:x=+1011,[x]补=01011•例:x=-1011,•[x]补=25+x=100000-1011=10101)2(Mod0x2-x2x0x[x]1nn1nn2=补2019/10/1031•补码中“0”的表示是唯一的•[+0]补=[-0]补=0.00…0(纯小数)•[+0]补=[-0]补=00…0(纯整数)•补码表示的最小数可以表示到-1或-2n•对于纯小数•[-1]补=2+(-1)=1.00…0(Mod2)•对于纯整数•[-2n]补=2n+1+(-2n)=100…0(Mod2n+1)2019/10/1032补码的范围•因为补码可以表示-1(纯小数)和-2n(纯整数),所以补码的数据表示范围比原码大。•[-1]补=1.00…0•[-2n]补=100…0•对于-1和-2n的补码,符号位上的1具有特殊意义,既表示符号也表示数值。•补码中每一种编码都有独立的意义。•对于n+1位补码,其表示范围为:•纯小数-1~1-2-n共2n+1个数•纯整数-2-n~2n-1共2n+1个数2019/10/1033补码的求法•若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]补=100101102019/10/1034补码与原码的关系•若x≥0,则[x]补=[x]原•若x<0,则将除符号位以外的[x]原各位取反(符号位不变),然后在最低位上加1,即得到[x]补。•若x<0,将除符号