第二章 数据的机器层次表示_第1页
第二章 数据的机器层次表示_第2页
第二章 数据的机器层次表示_第3页
第二章 数据的机器层次表示_第4页
第二章 数据的机器层次表示_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 数据的机器层次表示第二章 数据的机器层次表示2.1 数值数据的表示2.2 机器数的定点表示与浮点表示2.3 非数值数据的表示2.4 十进制数和数串的表示2.5 现代微型计算机系统中的数据表示举例2.6 数据校验码 第二章 数据的机器层次表示2.1 数值数据的表示2.2 机器数的定点表示与浮点表示2.3 非数值数据的表示2.4 十进制数和数串的表示2.5 现代微型计算机系统中的数据表示举例2.6 数据校验码 2.1 数值数据的表示预备知识:进制以及进制转换二进制、八进制、十进制、十六进制的相互转换,如图2.1 数值数据的表示什么是真值,什么是机器数(机器码)?一般地,直接用正号“+”和负

2、号“-”来表示符号的二进制数,叫做符号数的真值真值。当使符号数值化以后,就可以在计算机中使用它。计算机中使用的符号数叫做机器数机器数。 真值与内存的二进制不一定是自动转换的关系2.1 数值数据的表示真值在计算机中的存在形式(机器码)的表示与设计该机器时候所规定的数值的表示法有关。机器码的表示方法有:原码补码反码移码如 1 这个真值 在补码表示的计算机的内存中机器码为111111112.1 数值数据的表示1、无符号数和带符号数无符号数:整个机器字长的全部二进制位均表示数值位。带符号数:带有“+”或“-”的数,一般在计算机中用“0”表示“+”,用“1”表示“-”。问题:在计算机中怎么区分一个数是无

3、符号数还是带符号数?2.1 数值数据的表示你自已决定是否需要有正负。就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。在计算机中,可以区分正负的类型,称为有符类型,在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。无正负的类型(只有正值),称为无符类型。数值类型分为整型或实型,其中整型又分为无符类数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。型或有符类型,而实型则只有符类型。字符类型也分为有符和无符类型。字符类型也分为有符和无

4、符类型。比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。2.1 数值数据的表示使用二制数中的最高位表示正负。首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型固定是1个字节,所以最高位总是第7位。(红色为最高位)单字节数: 1111 1111双字节数: 1111 1111 1111 1111四字节数: 1111 1111 1111 1111 1111 1111 1111 1111当我们指定一个数量是无

5、符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值。2.1 数值数据的表示无符号数和有符号数的范围区别。无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值对比:无符号数: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20有符号数: 0111 1111 值:127 1* 26 + 1* 2

6、5 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:无符号数: 0 - 255有符号数: -128 - 0 - 1272.1 数值数据的表示一个带符号数,如果是正的,在计算机中和无符号数相同,用原码表示,如果是负的用补码表

7、示,下面我们讲一下原码和补码的概念。2.1 数值数据的表示1、 原码表示 1)定点小数的原码 定义: 设X是一个二进制表示的真值,形如 0.x1x2x3xn,其中 xi=0,1,设X原为原码形式表示的机器数, 则: X原= 在X原中用 0 1来表示 +、号 0正负10101XXXX2.1 数值数据的表示 举例:设有一个小数(二进制)+0.1010110,则在使用原码作为表示法的计算机的内存中的机器数是多少?(简而言之, +0.1010110 的原码是多少,或 +0.1010110 原=?) -0.1011011原=? 解: +0.1010110 原= 0.1010110 (第1个0是符号) -

8、0.1011011原 = 1.0000000 (0.1011011)= 1.0000000+ 0.1011011= 1.1011011注意,在计算机中小数点是人为规定其位置,并没有一个小数点存在。2.1 数值数据的表示 原码的性质:最高位表示符号 0-正 1-负0的原码有两种形式 +0 -0仅从机器数的值而言,负数的原码大于正数的原码 如 0.1010110 在机器中表现为 01010110 而1.1011011在机器中表现为 11010110 (小数点是程序自己确定,计算机只管保存和运算)2.1 数值数据的表示2)定点整数的原码 当我们约定小数点在数的最后,则机器数表示整数。整数的原码定义:

9、设X是一个二进制表示的真值,形如 x1x2x3xn,其中 xi=0,1,设X原为原码形式表示的机器数, 则: X原= 在X原中用 0 1来表示 +、号 0正负11120202nnnXXXX2.1 数值数据的表示举例:设机器的字长为8位(即n=8)则 +1010100原= 01010100 -1010100原= 10000000 (-1010100)= 11010100 3)原码的优缺点 优点:利于实现乘除 不方便实现加减2.1 数值数据的表示2、 补码表示 调整手表到标准时间,可以有两种方法:加法和减法 10 + 5 (mod 12) =3 10 7 (mod 12) =3由于有模运算的存在,

10、我们可以把减法变成加法来进行;而且计算机运算的位数有限,也可以看成一个钟表2.1 数值数据的表示设计算机字长为n位,则数将在000 到111总数为个数的范围内;因此,我们可以把 看成模,则运算的结果取模后也必然在这个范围内。对于计算机的表示数而言,补码定义分定点小数和定点整数的补码定义。 定点小数的补码定义 即 正小数的补码是自身,而负小数的补码要加上201,210,XXXXX补2.1 数值数据的表示这个定义在数轴上的意义如图:举例: +0.1011011补=0.1011011 -0.1010110补=2+(- 0.1010110) =10.0000000 - 0.1010110 =1.010

11、1000注意:最前面的是符号位,其实负数相当于被移动到1 ,2)区间,还要提示一点,在计算机中小数点的位置是我们约定的。如第2个数存储在内存:定点小数即我们约定小数点在最高位后的数。2.1 数值数据的表示 定点整数的补码设字长为n位,则数的范围是-2n-1, 2n-1)则定点整数的的补码定义是:假设字长8位,则: +86补 = 01010110 -86补 = 28+(-1010110) =100000000-1010110 =10101010也就是说,在补码表示的计算机中-86保存为计算-1在16位补码表示,体验 int i=-1;unsigned int j =i;02,220,11XXXX

12、Xnnn补2.1 数值数据的表示补码的性质:(1) 补码的最高位反映了真值的正负;(2) 0补只有一种形式,这由定义可以看出;(3)负数的补码从值上看是大于整数的补码(符号位也表示值时)2.1 数值数据的表示课堂练习:为什么原码不方便加减?要使用补码?计算下列真值的补码(n=8),多余的数据不要:0.125补 = ? -0.3567补=? -0.2853补=? 65补 = ? -113补 = ? -3补=2.1 数值数据的表示4、反码表示也有定点小数反码和定点整数反码;(1)定点小数反码 定义:设X= 0.x1x2xn-1 则定点小数反码定义为:注意到 0在两个公式中都包括。11120202n

13、nnXXXX2.1 数值数据的表示举例+ 0.1110100反=0.1110100-0.1101011反=2-2-8+1+( -0.1101011) = 10.0000000 0.0000001 0.1101011 = 1.0010100 与 0.1101011 逐位比较,得出结论: 反码实质上是正数不变,负数的反码是原码各位求反 0-1, 1-0得到。2.1 数值数据的表示(2)定点整数反码 定义:设X= xn-2xn-3x1 x0 则定点整数反码定义为:注意到 在两个公式中都包括0 。类似,-1010011反=0010110002,1220,11XXXXXnnn反2.1 数值数据的表示原码

14、、反码、补码比较:(1) 三种编码的最高位都是符号位。(2) 当真值为正时,三种编码的符号位都用0表示,数值部分与真值相同。 即它们的表示方法是相同的。2.1 数值数据的表示(3) 当真值为负时,三种编码的符号位都用1表示,但数值部分的表示各不相同,数值部分存在这样的关系:补码是原码的“求反加1”(整数),或者“求反末位加1”(小数);反码是原码的“每位求反”。(4) 它们所能表示的数据范围,基本上是一样的,-2nX2n(整数)或-1X1( 小数),只是补码多表示一个数-2n(整数)或-1(小数)。第二章 数据的机器层次表示2.1 数值数据的表示2.2 机器数的定点表示与浮点表示2.3 非数值

15、数据的表示2.4 十进制数和数串的表示2.5 现代微型计算机系统中的数据表示举例2.6 数据校验码 第二章 数据的机器层次表示2.1 数值数据的表示2.2 机器数的定点表示与浮点表示2.3 非数值数据的表示2.4 十进制数和数串的表示2.5 现代微型计算机系统中的数据表示举例2.6 数据校验码 2.2 机器数的定点表示与浮点表示前面介绍了数在计算机中表示方法(编码),现在讨论小数点的问题,在数据保存到内存时,不用考虑小数点的符号也要放进去,在设计计算机或在指定数据类型时,就有了默认的小数点位置。如01010100 如果我们把它看成纯小数,则相当于有一个小数点在最高位和次高位之间;如果我们把它看

16、成纯整数,则相当于有一个小数点在最后;虽然我们不需要专门的空间来存储小数点,但我们可以考虑是定点表示还是浮点表示。2.2 机器数的定点表示与浮点表示数据的表示常用的有两种:定点表示法和浮点表示法1、 定点表示法: 指小数点被约定的位置不变,一般有两种形式 一种是纯小数,另一种是纯整数;注意:这个小数点是我们约定的,计算机的CPU并不知道,如果要显示出来,则通过我们的程序加上小数点显示出来;2.2 机器数的定点表示与浮点表示1)定点数的范围(1)n位长(1位符号位,n-1位数值)的定点纯小数的范围 考虑原码方式和补码表示方式: 原码定点纯小数 ?0000000 ?表示符号位,符号位后认为有一个小

17、数点 正数 00.00 - 01111.11 0 1-2-n+1 负数 10.00 - 11111.11 0 -(1-2-n+1) 小数点默认在符号位后。所以范围是-(1- 2-n+1),1- 2-n+12.2 机器数的定点表示与浮点表示补码定点纯小数 按定义,补码有 -1 X 故包含 -1 X1 所以不包含 1 所以, 数的范围 -1,1) 因为 不到 1 ,而数据的最小单位是 0.00.1 所以 -1 1 -2-n+1是其范围2.2 机器数的定点表示与浮点表示(2)n位长(1位符号位,n-1位数值)的定点整数的范围 原码定点整数 正数: 000.00 01.111 02n-1-1 负数:

18、100.00 11.111 0-(2n-1-1) 所以原码的范围 -(2n-1-1), 2n-1-12.2 机器数的定点表示与浮点表示补码定点整数 按补码定义说明负数到-2n-1,而正数不到2n-1,差0.01,因此,补码的范围是-2n-1, 2n-1)即 -2n-1, 2n-1-12.2 机器数的定点表示与浮点表示如果表示为无符号数,则所有的位都表示为数值,则从 00.00到11.11数的范围是02n-1例如:在C语言中(C语言程序): int i ; /* i的范围是 -3276832767*/ unsigned int j ; /* j的范围是 065535*/注:int的字长是2个字节

19、(即sizeof(int)为2 )共16位,类似的,char类型的范围是 128127,而unsigned char 的范围是 02552.2 机器数的定点表示与浮点表示2、 浮点表示法1)浮点数的构成 先看常用的表示大数的一般形式: 60000 = 0.6 105 N m Re其中 N称数值, m称尾数, R称基数, e称阶码或指数如果在计算机中表示,则进制是确定的R=2,没有必要为一个不变的数2专门用空间存储,因此,要在计算机中保存一个数值N,只要保存m和e就可以了。2.2 机器数的定点表示与浮点表示在计算机中,用长为n位的二进制来表示浮点数N的值:其中,指数e有正负,尾数m也有正负。由一

20、般我们所了解的10进制形式,如 x=a 10b 知道:b越大,则x能表示的值就越大,所以b所能达到的大小直接反映了x的范围,而a的位数多少则反映了x的精度,例如:3 1013比3 1010的范围广;而 3.141592 104比3.14 104的精度高。2.2 机器数的定点表示与浮点表示所以在上面的定义中,e表示了数的范围,而m表示了数的精度。e的位数越多,则能表示的数的范围就越大,而m的位数越多,则能表示的精度就越高,例如C语言中的float和double类型的比较。 float pi1=3.14259265 ;/*精度不够,舍弃*/ double pi2 = 3.14159265358979;浮点数的符号由尾数的符号决定,而指数也有符号,尾数的符号称数符,而指数的符号称阶符2.2 机器数的定点表示与浮点表示如图:例子:假设要设计一台计算机,希望能表示的数的范围是1.0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论