620 likes | 858 Views
微型计算机技术及应用. 中山 大 学 信息科学技术学院 郭雪梅 Tel:39943108 Email:guoxuem@mail.sysu.edu.cn URL1 : http://human-robot.sysu.edu.cn/course. 计算机当中的数和编码系统. 进位计数制及其表示方法 数制之间的转换 字和各种字符的编码 小结. 进位计数制及其表示方法. (一)、进位计数制及其要素: 进位计数制:按进位原则进行计数的方法。 例:十进制数有 : 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 十种状态。
E N D
微型计算机技术及应用 中山 大 学 信息科学技术学院 郭雪梅 Tel:39943108 Email:guoxuem@mail.sysu.edu.cn URL1:http://human-robot.sysu.edu.cn/course
计算机当中的数和编码系统 • 进位计数制及其表示方法 • 数制之间的转换 • 字和各种字符的编码 • 小结
进位计数制及其表示方法 (一)、进位计数制及其要素: 进位计数制:按进位原则进行计数的方法。 例:十进制数有 : 0、1、2、3、4、5、6、7、8、9十种状态。 我们说:十进制数基数10,变化范围0~(10-1), 逢十进一。 看一个十进制数: 4 0 9 4 每一位十种数码的状态(0~9) 千 百 十 个 本位绝对值的大小=数×位权 103102101100 如:千位= 4×103=4000
十进制数有二个要素: 1. 基数:十 每一位 0、1、2、3、4、5、6、7、8、10-1 (逢 十 进 一)。 2. 位权:10i 某一位数绝对值大小 = 数×位权. 二个要素: 适用于二、八、十六进制。 二进制数:基数2 位权2i 八进制数:基数8 位权8i 十六进制数: 基数16 位权16i
(二)、 进位计数制的表示方法: 1234.56= 1 103+2 102+3 101+4 100+5 10-1+6 10-2 推广到一般形式(任意十进制): N=±[k n 10n+k n-1 10 n-1+……+k0 100 +k-1 10-1+…… +k-m 10-m] = ± [ k i 10i] (i= -m~n) 任何某一位数大小 = k i 10i 对于任意进制:N= ± [k i R i] (i=-m~n) R — 基数 , 逢R进一. Ri— 位权
例如:二进制数 B=10011101 B=1 27+1 24+1 23+1 22+1 20 =(157)10 在计算机里进行运算和处理均是按二进制数处理的。 而二进制数写起来麻烦; 书写时又以八进制或十六进制表示; 日常生活中又常用十进制, 因此就有:二 十 八 十 二 八 数制之间转换问题 十六 十 二 十六
十进制向二进制转换 1.十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 7
(217)10÷2 ----得到余数k0 /2 整数 商 余数: 按照相反的方向写下来。 /2 /2 /2 /2 /2 /2 /2 /2 217 108 54 27 13 6 3 1 0 ----商 1 0 0 1 1 0 1 1 --余数 (217) 10=(11011001)2 书写方向
2 2 2 2 2 2 2 (余1 10001011 69 (余1 34 (余0 (余1 17 8 (余0 (余0 4 (余0 2 1 Example 转换十进制数 139 到二进制数。 Solution 139 除余法 (139)10=(10001011)2 9
2.十进制小数转换为二进制小数 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 10
十进制小数向二进制转换 11
Example 转换十进制小数0.6875到二进制 Solution 0.6875 2 … 整数部分为 1 1.3750 0.375 2 (0.6875)10 = (0.1011)2 … 整数部分为 0 0.750 2 … 整数部分为 1 1.500 0.500 2 … 整数部分为 1小数部分为 0 1.0 12
Example 将小数 0.4 转换成六位二进制数。 Solution 将要转换的数字写在左上角,然后连续乘 2。将积的整数部分取出。如此进行,直到积中的小数部分为零,或者达到所要求的六位为止。 0.4 0.8 1.6 1.2 0.4 0.8 1.6 0 . 0 1 1 0 0 1 13
3. 二→十 同样可以用公式进行 (0. 1001)2 =1 2-1+1 2-4=0. 5+0. 0625=(0. 5625)10 (0.100111)2=1 2-1+1 2-4+1 2-5+1 2-6 =(0. 609375)10 看一下常用的几种数制写法:八位二进制数
十进制 二进制 八进制 十六进制 BCD 0 0 0 0 0 • 1 01 1 1 1 • 2 10 2 2 10 • 3 11 3 3 11 • 4 100 4 4 100 • 5 101 5 5 101 • 6 110 6 6 110 • 7 111 7 7 111 8 1000 10 8 1000 • 9 1001 11 9 1001 • 10 1010 12 A 10000 • 11 1011 13 B 10001 • 12 1100 14 C 10010 • 13 1101 15 D 10011 • 14 1110 16 E 10100 • 15 1111 17 F 10101 • 16 10000 20 10 10110 • 。 。 。 11 。 • 。 。 。 12 。 • 。 。 。 。 。 • (255)D 11111111B 377Q FFH (10,0101,0101)BCD
(二)、 二 八,二 十六,二 BCD之间转换 1、 二 八 • 二→八: • 以小数点为界向左向右三位一段,不够补0, • 三位二进制数用一位八进制数表示。 • 例:( 1,101,001.010,011,1 )2 • 不够补0 不够补0 • (001 101 001. 010 011100)2=(151.234)8 • 八→二: • 一位八进制数用三位二进制数表示. • (151.234)8=(001 101 001. 010 011 100)2
2、二 十六: 二→十六: 以小数点为界向左向右四位一段, 不够补0, 四位二进制数用一位十六进制数表示。 例:( 110 1001.0100 111 )2 →( 69.4E )16 不够补0 不够补0 (0 1 1 0,1 0 0 1 . 0 1 0 0,1 1 1 0)2=(69 . 4E)16 十六→二:一位十六进制数用四位二进制数表示。 例: (69 . 4E)16=(0 1 1 0,1 0 0 1 . 0 1 0 0,1 1 1 0)2
3、 二BCD BCD数: 常用8421码,每一位十进制数用四位二进制编码表示。 1111B 9D 1001BCD 10D 0001 0000BCD BCD码与二进制数之间转换没有直接关系, 必须先转换成十进制,然后转换成二进制。 例:1111111B=255D=0010,0101,0101BCD 0010,0101,0101BCD=255D=1111 1111B
字和各种字符的编码 字和各种字符按照特定规则用二进制编码在机器中表示。编码有各种方式: 目前规定在微型机中最普遍采用ASCⅡ码 (American Standard Code for Information Interchange )美国标准信息交换码。 (一)二进制数的运算 (二)带符号数的表示
ASCⅡ码: 采用七位二进制编码,可以表示128个字符。 bit7作奇偶校验位,在机器中表示时,常认为“0”, 用一个字长(8位)表示一个ASCⅡ字符。 常用的ASCⅡ字符: 0—9 的ASCⅡ码30H—39H A—Z 的ASCⅡ码41H—5AH a—z 的ASCⅡ码61H—7AH
(一)二进制数的运算 (二)带符号数的表示 1. 机器数与真值 2. 原码 3. 反码 4. 补码
上面提到的是一种无符号数, 机器数中会有正有负。符号怎么表示呢? 通常数的最高位为符号位,对于字长8位机器数: D7为符号位: 0表示“+”,1表示“—”。符号数码化了。 D6~D0为数字位。 如: X=(01011011)2=+91 X=(11011011)2= - 91 连同符号位在一起作为一个数称为机器数, 机器数的数值称为的真值。 如: N1=+ 1011011 N2= - 1011011 为真值 0 1011011 1 101 1011 为机器数
符号数码化了,对数据进行运算时,符号位应如何处理?符号数码化了,对数据进行运算时,符号位应如何处理? • 把符号位和数值位一起编码:原码,反码,补码。 2. 原码: 正数符号位用“0”表示,负数符号用“1”表示, 这种表示法称为原码。 X=+105 [X]原= 0 1101001 X=-105 [X]原= 1 1101001 符号 数值 原码表示简单,真值 转换方便,减法不方便。 引进反码,补码。
3. 反码: 正数反码表示与原码相同, (最高位“0”表示正,其余位为数值位。) 负数的反码表示为负数原码的符号位不变尾数按位取反。 例: [+4]反= 0 0000100 [-4]反= 1 1111011 [+127]反 = 0 1111111 [-127]反 = 1 0000000 [+0]反= 0 0000000 [-0]反= 1 1111111
4 补码 定义: 若X>0, 则[X]补= [X]反= [X]原 若X<0, 则[X]补= [X]反+1 二进制补码表示法,是现在最普遍,最重要,应用最广泛的整数表示法 二进制数: 补码: 25
补码的运算原理 模(module)就是一个计数系统的最大容量,其大小等于以进位计数制基数为底,以位数为指数的幂。凡是用器件进行的运算都是有模运算,运算结果超过模的部分被运算器自动丢弃。因此,当器件为n位时,有: X=2n+X (mod 2n) 不难验证, [X]补=2n+X (mod 2n) 因此, [XY]补= 2n+ (XY) (mod 2n) = (2n+ X)+ (2n Y) = [X]补+ [Y]补 26
[例]: X= –52= – 0110100 [X]原 = 10110100 [X]反 = 11001011 [X]补 = [X]反+1=11001100 n位补码表示数值的范围是 对应的补码是1000~ 0111。 27
数0的补码: [+0]补= [+0]原=00000000 [-0]补= [-0]反+1=11111111+1 =1 00000000 对8位字长,进位被舍掉 ∴[+0]补= [-0]补= 00000000 即:数0的补码是唯一的。 28
特殊数10000000 该数在原码中定义为: -0 在反码中定义为: -127 在补码中定义为: -128 对无符号数:(10000000)2 = 128 29
8位有符号数的表示范围: 对8位二进制数: 原码: -127 ~ +127 反码: -127 ~ +127 补码: -128 ~ +127 想一想:16位有符号数的表示范围是多少? 30
[例]: X=-0110100,Y=+1110100,求[X+Y]补 [X]原=10110100 [X]补= [X]反+1=11001100 [Y]补= [Y]原=01110100 所以: [X+Y]补= [X]补+ [Y]补 =11001100+01110100 =01000000 31
4. 符号数运算中的溢出问题 进(借)位—— 在加法过程中,符号位向更高位产生进位; 在减法过程中,符号位向更高位产生借位。 溢出—— 运算结果超出运算器所能表示的符号数范围 32
溢出的判断方法 方法1: 同号相减或异号相加——不会溢出。 同号相加或异号相减——可能溢出: 两种情况: 同号相加时,结果符号与加数符号相反——溢出; 异号相减时,结果符号与减数符号相同——溢出。 方法2: 两个带符号二进制数相加或相减时,若 C7C6=1, 则结果产生溢出。 C7为最高位的进(借)位;C6为次高位的进(借)位。 33
[例]: • 有符号数运算,有溢出表示结果是错误的 • 无符号数运算,有进位表示结果是错误的 CASE1: CASE2: 1 0 1 1 0 1 0 1 + 1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 + 0 1 1 0 0 0 1 1 1 0 1 0 0 1 0 1 CASE3: 0 1 0 0 0 0 1 0 + 1 1 0 0 1 1 0 1 1 0 0 0 0 1 1 1 1 34
定点数与浮点数 计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。 1. 定点数表示法(fixed-point) 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。 35
定点小数是纯小数 约定所有机器数的小数点隐含在符号位之后、有效部分最高位之前,叫定点纯小数机器数,简称定点小数,例如 小数点位置 无论是定点整数,还是定点小数,都可以有原码、反码和补码三种形式。例如定点小数 如果这是个原码表示的定点小数,[x]原=(11110000)B,则 x= (-0.111)2=(-0.875)10,如这是补码表示的定点小数, [x]补=(11110000)2,则[x]原=(10010000)2,则 x= (-0.001)2=(-0.125)10。 36
定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。 定点整数的表示范围是: 1≤ | x | ≤ 2^n - 1 当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。 小数点位置 37
2. 浮点数(对应科学计数法) 计算机多数情况下采作浮点数表示数值,它与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分: B = ±S×2^±J S-尾数,为小数或整数。J-阶码,为整数。例如: 110.011(B)=1.10011×2^+10=11001.1×2^-10=0.110011× 2^+11 尾数 阶码 计算机中的浮点数:阶码+尾数 阶符 阶码 数符 尾数 0 11 0 110011 -0.000110011(B)=-0.110011× 2^-11 1 11 1 110011 阶符 阶码 数符 尾数 38
浮点数所表示的范围比定点数大。假设机器中的数由 8 位二进制数表示(包括符号位):在定点机中这 8 位全部用来表示有效数字(包括符号);在浮点机中若阶符、阶码占 3 位,尾符、尾数占 5 位,在此情况下,若只考虑正数值 定点机小数表示的数的范围是 0.0000000 到 0.1111111,相当于十进制数的 0 到 127/128, 而浮点机所能表示的数的范围则是 2 ^- 11×0.0001 到 2^11×0.1111,相当于十进制数的 1/128 到 7.5 。 显然,都用 8 位,浮点机能表示的数的范围比定点机大得多。 一般来说,增加尾数的位数,将增加可表示区域数据点的密度,从而提高了数据的精度;增加阶码的位数,能增大可表示的数据区域。 浮点数运算后结果必须化成规格化形式,所谓规格化,是指对于原码尾数来说,应使最高位数字S1=1,如果不是1且尾数不是全0时就要移动尾数直到S1=1,阶码相应变化,保证N值不变。 39
浮点数的原码、反码、补码表示法 浮点数的原码、反码、补码是对阶码和尾数分别进行。例: (1)X = +0.11101101×2^-101 [X]原= 1101 0 11101101 [X]反= 1010 0 11101101 [X]补= 1011 0 11101101 (2)X = -0.11101101×2^+101 [X]原= 01011 11101101 [X]反= 01011 00010010 [X]补= 01011 00010011 (3)X = -0.11101101×2^-101 [X]原= 11011 11101101 [X]反= 10101 00010010 [X]补= 10111 00010011 注意:浮点数的补码负数表示范围比原码大。 40
【例 2】设机器字长16位,定点表示,尾数15位,数符1位,问: (1)定点原码整数表示时,最大正数是多少?最小负数是多少? (2)定点原码小数表示时,最大正数是多少?最小负数是多少? [解:] (1)定点原码整数表示 最大正数值 0111 111 111 111 111 最小负数值 1111 111 111 111 111 最大正数值=(2^15-1)10=(+32767)10 最小负数值=-(2^15-1)10=(-32767)10 (2)定点原码小数表示 最大正数值=(1-2^-15)10=(+0.111...11)2 最小负数值=-(1-2^-15)10=(-0.111..11)2 41
字符的编码 • 西文字符的编码 ASCII 码(美国国家标准信息交换码) 扩展ASCII码 unicode编码 • 汉字编码 • 输入码 • 交换码 (国标码) • 内部码 • 字型码 (输出码)
ASCII 码 7 6 5 4 3 2 1 ASCII码是美国信息交换标准代码。 (American Standard Code for Information Interchange) 包括0~9十个数字,大小写英文字母 及专用符号等95种可打印字符。 Computer的ASCII码 01000011 01101111 01101101 01110000 01110101 01110100 01100101 01110010
扩展ASCII码 • 由7位二进制编码构成的ASCII基本字符集只有128个字符,太少了。 • 在原ASCII码128个符号的基础上,将它的最高位设置为1进行扩展,能够表示的编码范围为:00000000~11111111,共可表示256个字符和图形符号,称为扩展ASCII码字符集。 • 扩展ASCII的前128个字符的编码与原ASCII码相同。
Unicode编码 • 国际标准化组织在20世纪90年代初期制定的各国文字、符号的统一性编码。该编码采用16位编码体系,可容纳65536个字符编码,这么多的符号几乎能够表达世界上所有书面语言中的不同符号。 • Unicode主要想解决多语言的计算,随着国际互联网的迅速发展,不同国家之间的人们进行数据交换的需求越来越大,Unicode因此而成了当今最为重要的交互和显示的通用字符编码标准。 • Unicode适用于所有已知的编码,覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。
交换码(外部码内部码) 机内码 机内码向字形码转换 显示输出 打印输出 汉字编码 字符代码化(输入码)
(1)汉字输入编码方法 • 数字编码 数字编码就是用数字串代表一个汉字的输入,常用的有国际区位码。如:“中”5448 、 “…”0113 • 拼音码 拼音码是以汉语读音为基础的输入方法。常用的有智能全拼、微软拼音、紫光拼音、智能狂拼等。 • 字形编码 字形编码是以汉字的形状确定的编码。常用的有五笔字形、表形码等。
(2)汉字内部码 • 汉字内部码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的代码。 1.汉字信息的编码知识 ⑴国标码:是指我国1981年公布的“中华人民共和国国家标准信息交换汉字编码”,代号为“GB2312-80”。由连续的两个字节组成。 2.机内码:在计算机内表示汉字的代码是汉字机内码,汉字机内码由国标码演化而来,把表示国标码的两个字节的最高位分别加“1”,就变成汉字机内码 3.输入码: 汉字输入码是指直接从键盘输入的各种汉字输入方法的编码,属于外码。 4.字型点阵码:用点阵方式来构造汉字字型,然后存储在计算机内,构成汉字字模库。目的是为了能显示和打印汉字。
几种编码之间的转换关系如下: • 汉字的区位码、国标码、内部码三者之间存中如下的转换关系: • 国标码 = 区位码+2020H(即把区位码的区号和位号分别加上十进制数32) • 内部码 = 国标码+8080H(即把国标码的高位字节和低位字节分别加上十进制数128) • 内部码 = 区位码+A0A0(即把区位码的区号与位号分别加上十进制数160)
(3)汉字字形码 • 汉字字形码是表示汉字字形的字模数据,也称字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。