300 likes | 463 Views
微机原理及应用. 主讲:李乾宝 E-Mail: qbli@stu.edu.cn. 第二章 计算机中数据的表示. 在计算机内部,数据都是用二进制数 0 和 1 来表示的,按数据的类型,可分为数值数据和非数值数据两大类,数值数据用于表示数量的大小,常常参加各种数学及逻辑运算,非数值数据指声音、图像、字符等类型的数据。这两类数据在计算机中的表示方法和处理方式有很大的差别,本章将重点讨论数值数据的表示方法与编码格式。. 第二章 计算机中数据的表示.
E N D
微机原理及应用 主讲:李乾宝 E-Mail: qbli@stu.edu.cn
第二章 计算机中数据的表示 • 在计算机内部,数据都是用二进制数0和1来表示的,按数据的类型,可分为数值数据和非数值数据两大类,数值数据用于表示数量的大小,常常参加各种数学及逻辑运算,非数值数据指声音、图像、字符等类型的数据。这两类数据在计算机中的表示方法和处理方式有很大的差别,本章将重点讨论数值数据的表示方法与编码格式。
第二章 计算机中数据的表示 • 数值数据在计算机中的表示涉及三个方面内容:进制表示法;符号在机器中的表示,即机器数的表示法;小数点的表示与处理,即定点数与浮点数表示法等。本章将从这三方面进行叙述,最后对常用校验码作简单介绍。
2.1 数制及其转换 • 进位记数制的概念:使用有限个数码来表示数据,按进位的方法进行记数,称为进位记数制; • 进位记数制中有两个重要的概念 • 基数:是指用来表示数据的数码的个数,超过(等于)此数后就要向相邻高位进一; • 位权:同一数码处在数据的不同位置时所代表的数值是不同的,它所代表的实际值等于数字本身的值乘上一个确定的与位置有关的系数,这个系数则称为位权,位权是以基数为底的指数函数。 R进制数NR的表示方法 n NR = ± k i R i i = -m
计算机中常用的进制 • 在日常生活中,通常使用十进制表示数值,而计算机内部采用的是二进制表示法,为了简化数据的书写,常采用八进制和十六进制表示法。 • 为了区别不同进制的数据,可在数的右下角标注。一般用B(Binary)或2表示二进制数,O (Octal)或8表示八进制数,H(Hexadecimal)或16表示十六进制数,D(Decimal)或10表示十进制。在本书中我们分别用字母B、O、H、D表示,如果省略进制字母,则默认为十进制数。
计算机中常用的进制 在计算机内部,任何数据都是用0和1来表示的。因为二进制数只有0和1两个数字,物理表示容易实现,物理元件的任何两种不同的稳定状态,都可以表示0,1两个数字,而且二进制的运算规则简单,实现二进制运算的线路容易实现,还可应用逻辑代数等效学工具进行逻辑线路的设计和分析。 • 十进制表示法 • 基数为10,采用0 ~ 9 十个数码表示数值,逢十进一; • 位置i处的权值为10i。 • 二进制表示法 • 基数为2,只用0,1两个数码来表示数值,逢二进一; • 各数位上的权值为2i 。
计算机中常用的进制 • 八进制表示法 • 基数为8,用0 ~ 7来表示数值,逢八进一 • 各位的权值为 8 i。 • 十六进制表示法 • 基数为16,用数字0~9和字母A,B,C,D,E,F(对应10进制数的10—15)来表示数值,逢16进一。 • 各位的权值为16 i
进制间的转换 • 日常生活中,人们已经习惯于使用十进制计数法,而在计算机内部采用的是二进制表示法,在表示字符、地址等数据时,为了简化书写多采用十六进制或八进制表示法。因此,有必要了解各种进制之间的转换规则。
二进制数和十进制数之间的转换 • 二进制数转换为十进制数 • 将二进制数按“权”展开相加即可。 (1011.11)B =123+022+121+120+12-1+12-2 = 8+0+2+1+0.5+0.25 = (11.75)D • 十进制数转换为二进制数 • 十进制数到二进制数的转换比较复杂,要把整数部分和小数部分分别进行转换,然后再把转换结果相加。 • 整数转换采用除2(基数)取余法 • 小数部分转换采用乘2(基数)取整法 0.375 2 0 .75 2 1 .5 2 1 . 0
二进制数和八、十六进制数之间的转换 • 由于二进制的基数是2,而八进制和十六进制的基数分别是23和24,即一位八进制数正好对应3位二进制数,一位十六进制数正好对应4位二进制数,因此他们之间的转换非常简便。
二进制数和八、十六进制数之间的转换 • 二进制数到八进制数: 三位化一位 • 二进制数到十六进制数: 四位化一位 • 八进制数到二进制数: 一位化三位 • 十六进制数到二进制数: 一位化四位 3 5 2 . 6 ‖ ‖ ‖ ‖ 011101010 . 110 B 6 . 8 ‖ ‖ ‖ 1011 0110 . 1000
2.2 数的定点与浮点表示 • 定点数表示法: 在计算机内部,符号位一般用一位二进制数来表示,0表示正,1表示负。小数点则不占位数,而是采用人为约定的方法。根据约定的小数点的位置不同,有两种定点数:定点整数和定点小数。
2.2 数的定点与浮点表示 • 定点整数:定点整数约定小数点在数值位的最低位之后,此时计算机中所表示的数一律为整数 • 带符号整数:对n位二进制数,其最高位为符号位,其他n-1位为数值部分 • 无符号整数:所有的数位都用来表示数值 • 定点小数:用最高位表示符号,其他n-1位二进制数表示数值部分,将小数点定在数值部分的最高位左边。
2.2 数的定点与浮点表示 • 浮点数表示法: Ef:阶符,一位,表示阶码的符号; E :阶码,和阶符一起指出数据小数点的位置 Sf :数符,数值的符号位; S :尾数,决定了数值的精度,即有效位数。 N = ± S * R ±E • 阶码的底R,一般选择与尾数的基数相同。对于同一种系统,R是隐含的约定常数,并不直接表示在浮点数表示中。 Ef∣E(m位)∣Sf∣ S(n位) 阶码部分 尾数部分 可以看出:一个浮点数实际由两个定点数组成,阶码是定点整数,尾数是定点小数。它相当于将数值规范为定点小数S乘以比例因子RE
2.2 数的定点与浮点表示 • 规格化浮点数: 指使是尾数部分满足(0.1)B≤|S|<1的数。 例如:0.0001111,规格化表示为:0.1111×2-3 • 数值精度与范围 浮点数实际由两个定点数组成:阶码是一个定点整数,用于指出小数点在数据中的位置,它的位数m决定了浮点数的表示范围。尾数为定点小数,它的长度n决定了浮点数的精度即有效数字的位数。
2.2 数的定点与浮点表示 • 机器零: 任何有限位数的浮点数,只能表示实数的一个子集,而且所表示的相对精度也是有限的。对一个浮点数为了能正确判断其是否为零特别规定:当尾数为0时,不论其阶码为何值;或者当阶码的值比它所能表示的最小值还小时,不管尾数的值如何;这两种情况计算机都把它看作0,称作“机器零”。
2.3 机器数的表示 • 数值编码是指如何在计算机中表示定点整数、定点小数和浮点数的正、负数和零,以简化运算规则并易于用逻辑线路实现。常用的编码方案有:原码、补码和反码。 • 数值数据在计算机中的编码表示称为机器数,而把机器数所代表的实际数值称为机器数的真值。
原码表示法 • 用最高位表示符号,其中0表示正号,l表示负号,其他n位表示数值的绝对值。 例如:[1011]原=00001011 [-1011]原=10001011 • 特点: • 有两个0:[+0]原=00000000;[-0]原=10000000 • 符号位不是数值的一部分,是人为约定的,在运算过程中要单独处理。 • 数的真值与原码表示间的对应关系简单,相互转换容易,用原码实现乘除运算的规则简单; • 缺点是0的编码不唯一,实现加减运算不方便。
反码表示法 • 用最高位表示符号,0表示正号,l表示负号,其他n位表示数值的绝对值,正数不变,负数取反。 例如:[1011]反=00001011 [-1011]反=11110100 • 特点: • 有两个0:[+0]反=00000000;[-0]反=11111111 • 缺点是0的编码不唯一,实现乘除运算不方便。
补码表示法 • 模的概念:模可以理解为一个进位制,用日常生活中的时钟可以说明模的概念。时钟以12小时记数,对于2点钟,既可以看作从0点出发顺时针拨2格(+2),也可以看作从0出发逆时针拨10格(-10),即在模为12时,-10可以映射为+2。通过引进模的概念可以将减法运算转换为加法运算来实现。 • 计算机的运算部件都有一定的字长限制,因此它的运算也是一种有模运算。
补码表示法 • 补码的求法:正数的补码与原码相同,负数的补码是其反码的末位加1求得 例如:[1011]补=00001011 [-1011]补=11110101 • 补码的性质: • 补码的符号位是数值的一部分。因此,补码的符号位可以参加运算。 • 在补码的表示中,0只有一种表示,负数补码的表示范围比原码多一种组合,此时最高位的1即表示符号,又表示数值。 • 负数补码的实质是将负数映射为正数,从而可以化减法为加法:即[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补
移码表示法 • 最高为为符号位,但取值与前三种编码相反,1代表正号,0代表负号,移码是补码的符号位取反,数值位不变 例如:[1011]移=10001011 [-1011]移=01110101 • 在移码表示法中0有唯一的编码 [+0]移=[-0]移=10000000 • 表示的数值范围与同样位数的补码表示法相同; • 移码表示法一般用于表示浮点数的阶码,因此一般只进行加减运算。对移码执行加减运算时,需要对结果进行修正,即对运算结果的符号位进行取反,得到的才是移码形式的结果。
2.4 BCD码表示法 • 二进制运算的规则简单、易于实现,计算机中运算器的设计都是以二进制运算为基础的。 • 日常生活中经常使用的是十进制,计算机进行数据处理时,首先要把十进制数转换为二进制数,以二进制数形式来进行运算并保存,当运算结果需要输出时,仍要进行二进制到十进制的转换以便于输出。 • 对于某些输入输出量很大但计算量小且简单的应用,这种处理方法就不是最优的。为此,大多数通用计算机,除二进制运算外还提供了十进制运算功能(硬件实现),即直接以十进制数参加运算的机器指令。
2.4 BCD码表示法 • 所谓十进制运算功能,实际是对于十进制数字进行编码,在计算机中保存每位十进制数字的对应二进制编码,并使用此编码进行运算,编码之间的加减运算仍需遵循二进制运算规则,并根据编码方案的不同对二进制运算结果进行必要的修正,输出时按编码规则输出十进制数; • 采用的编码方案为:用4位二进制数字来表示一位十进制数字,这种编码也称为二进制编码表示的十进制数(Binary Code Decimal),简称BCD码。 • 4位二进制数共有16种组合状态,可选取其中10个编码来表示十进制数的0~9,为此可有多种编码方案。
2.4 BCD码表示法 • BCD码可分为有权码和无权码两大类。 • 所谓有权码是指4位二进制编码中,每个数位分配有固定的权值,将各位的权值相加可得对应的十进制数。 • 有权码中通常根据编码中各位的权值给BCD码命名,例如5211码中由低到高的权值分别为:1、1、2、5,8421码的权值分别为1、2、4、8等。
8421码 • 采用有权码的方案中,使用最多的是8421码, • 它的特点是与数字0到9的ASCII码的低4位相同,有利于简化输人输出操作;缺点是加减运算规则复杂,需对二进制运算结果进行修正。 • 加法运算规则为:两个8421码相加时,按二进制加法规则进行,最高位产生的进位需送高位BCD码(加1);对于加法结果,当和≤1001时,无需修正,当和>1001时,加0110进行修正,产生的进位仍有效,需向高位BCD码进1,若此进位使高位BCD码>1001,则高位仍需加0110修正。 • 8421码的修正规则很好理解,采用二进制运算规则,四位BCD码的组间进位是逢16进1,而十进制运算规则是“逢l0进1”,因此需要进行加6即二进制的0110进行修正。
2.5 数据校验码 • 数据校验码是一种能够发现错误或带有自动改错能力的数据编码方法。其实现原理是对要传送的数据增加一些冗余位,按某种规律进行编码后一同传送。读出时再按约定的编码规律进行检查,看是否符合。如果校验规律选择得当,不仅能够查出错误,还能自动纠正错误。常用的校验方法有奇偶校验、CRC校验和海明码校验法,这里只介绍奇偶检验。
2.5 数据校验码 • 某种编码中,任何两个码字间具有的不同的二进制位的个数称为这两个码字间的距离;将各合法码字间的最小距离称为这种码制的码距。 • 例如,00000111与11000111两个码字有两位数字不同,他们的距离为2,而00010111和00000111两个码字有一位数学不同,他们的距离为1。
2.5 数据校验码 • 对于普通的二进制数据,编码是任意的,其码距为1,传输中任何一位出了差错时,无论是由1变为0,还是由0变为1,所得到的数据都还是合法的二进制数据,因此,无法发现差错。如果通过人为的编码,将合法码宇间的距离增大,可以将普通二进制编码集分为两部分:合法码字集和非法码字集。这样,一旦传输中发生错误,所得到的数据不再属于合法编码集,就可以发现错误,而且通过特定的编码技术,还可以实现自动纠错。