微型计算机中数的编码和字符的表示 1 数的表示与转换方法 2 带符号数的表示方法 3 定点数与浮点数 4 计算机中的编码
1 数的表示与转换方法 (1) 进位制:数值按不同的进位方法,常分为二进制(B)、八进制(o)、十进制(D)、十六进制(H)。 1 数的表示与转换方法 (1) 进位制:数值按不同的进位方法,常分为二进制(B)、八进制(o)、十进制(D)、十六进制(H)。 * 二进制:计算机中使用的计数制,只有0、1两个符号,逢2进1。 1100.101B=12.625D * 十六进制数 可认为是对二进制数的简化表现形式,它与二进制数有明显的对应关系。 包含0、1…9、A、B、C、D、E、F 16个符号,逢十六进一
1 数的表示与转换方法 (2) 不同进位位数值的转换 二\ 十六制 由于一个十六进制位正好由4位二进制数字构成: 1 数的表示与转换方法 (2) 不同进位位数值的转换 二\ 十六制 由于一个十六进制位正好由4位二进制数字构成: 0000 0001 0010…1001 1010 1011… 1110 1111 0 1 2 9 A B E F 0 1 2 9 10 11 14 15 所以在二\ 十六之间互相转换时,原则为: 二 到 十六, 以小数点为分界线,向左每4位一个组合转换成一位十六进制数,不够的左边补0,而右边每4位一个组合转换成16进制,不够的右边补0。 11011•101 0001 1011 1010 1 B · A
1 数的表示与转换方法 十六 到 二 将每个十六进制位转为4位二进制数即可。 二 、十六 到 十 各位按权相加
1 数的表示与转换方法 十 到 二、十六 整数部分转换(除2取余) 例 30D转换为二进制 即 30=11110B 低位 2 3 0 余0 1 数的表示与转换方法 十 到 二、十六 整数部分转换(除2取余) 例 30D转换为二进制 即 30=11110B 低位 2 3 0 余0 2 1 5 余1 2 7 余1 2 3 余1 1 余1 1 1 1 1 0
1 数的表示与转换方法 讨论:浮点数的存储精度问题 十 到 二、十六 小数部分转换(乘2取整) 1 数的表示与转换方法 十 到 二、十六 小数部分转换(乘2取整) 0.625D=0.101B 0.5 0.25 0.125 0.0625 0.03125 讨论:浮点数的存储精度问题
2 带符号数的表示方法 无符号数与带符号数 由于计算机只能识别0和1组成的数或代码,所以有符号数的符号也只能用0和1来表示,一般用0表示正,用1表示负。 由于数值部分的表示方法不同,有符号数可有三种表示方法,分别叫做原码、反码和补码。
2 带符号数的表示方法 无符号数与带符号数 原码表示的有符号数 最高位为符号位,数值位部分就是该数的绝对值。 2 带符号数的表示方法 无符号数与带符号数 原码表示的有符号数 最高位为符号位,数值位部分就是该数的绝对值。 例如:假设某机器为8位机,即一个数据用8位(二进制)来表示,则: +23的原码为 00010111 -23的原码为 10010111 其中最高位是符号位,后7位是数值位。 原码表示的数字范围: -127 — +127 +0原码:0 0000000 -0原码:1 0000000
2 带符号数的表示方法 无符号数与带符号数 反码表示的有符号数 2 带符号数的表示方法 无符号数与带符号数 反码表示的有符号数 把最高位规定为符号位,数值部分对于正数是其绝对值,而对于负数则是其绝对值按位取反(即1变0,0变1)得到的。 例如:+23的反码为 00010111 -23的反码为 11101000 反码表示的数字范围同原码。 数字‘0’ 有2个编码表示: (+0)反=00000000 (-0)反=11111111
2 带符号数的表示方法 无符号数与带符号数 补码表示的有符号数 2 带符号数的表示方法 无符号数与带符号数 补码表示的有符号数 正数的补码表示与原码、反码相同,负数的补码则是其绝对值的二进制值按位取反再在后末位加1形成。0的补码为00000000 例如: +23的补码为 00010111 -23的补码为 11101001 补码表示的数字范围: -128 — +127 负数补码最高位一定为1
例1:求-97的原码、反码和补码。 解: -97 原码为 1 1100001 -97 反码为 1 0011110 补码为 1 0011111
例2:已知(X)补=11101110B,求其原码和真值。 解:X为一负数,原码为数值部分求反加1 (X)原 = 1 0010010 真值 X = - 18
补码运算: 例3:用补码表示形式计算11-7=? [X]补+[Y]补=[X+Y]补 [X]补-[Y]补 =[X-Y]补=[X]补+[-Y]补 解: 11-7=4= 11+(-7) (11)补= 0 0001011 (-7)补= 1 1111001 (11)补-(7)补= (11)补 +(- 7)补= 1 0 0000100 =0 0000100 真值= 4
溢出与进位: 当运算结果超出数的表示范围时将产生溢出。 例 设字长为8位,用补码进行计算(+120)+(+30) 例 设字长为8位,用补码进行计算(+120)+(+30) 01111000 ………+120 00011110 ………+30 +________________________ 10010110 -106 错误
又例 设字长为8位,计算 -5-16=(-5)+(-16) 11111011 ………-5 11110000 ………-16 +________________________ 1 11101011 ……… -21 丢失 进位
关于负数原码、反码、补码问题的讨论 话题:已知负数的补码,求真值: 一方面,负数求补码由原负数真值的绝对值求反加1得到,那么由补码反求负数真值应该是补码减1再求反得到 另一方面,由补码反求负数真值,其绝对值一般仍采用其补码求反加1得到。 二者矛盾吗?
结论 二者完全一致,例如:求补码10000000与11111111的真值 首先,最高位为1,它是一个负数 下面求其绝对值: (1)10000000->01111111(减1)->10000000(求反)->128 11111111->11111110(减1)->00000001(求反)->1 (2)10000000->01111111(求反)->10000000(加1)->128 11111111->00000000(求反)->00000001(加1)->1 原因:减1后求反与求反后再加1是等价的: 设A为表示补码的绝对值值部分 A求反+1=(255-A)+1=256-A A-1求反=255-(A-1)=256-A 二者结果相同
3 定点数与浮点数 1.定点表示法 2.浮点表示法
1.定点表示法 所谓定点表示法,是指计算机中小数点位置是固定不变的。 根据小数点位置的固定方法不同,又可分为定点整数和定点小数表示法。前者小数点固定在数的最低位之后,后者小数点固定在数的最高位之前。设计算机的字长是8位,则上述两种表示法的格式如下:
2.浮点表示法 所谓浮点表示法,是指计算机中的小数点位置不是固定的,或者说是“浮动”的。为了说明它是怎样浮动的我们引入“阶码表示法”。对于任何一个二进制数N都可表示为: N=2±b×(±k) 阶码 尾数 浮点数的表示形式: X XX…XX X XX…XX 阶符 阶码 尾符(数符) 尾码 例: -23x13 浮点表示形式: 0 11 1 1101 阶符 阶码 尾符 尾码
IEEE 754标准 对float,共32位,m=8, n=23 若E=0,且M=0,则N为0。 若E=0,且M≠0,则 若E=255,且M≠0,则N=NaN(‘非数值’)。 若E=255,且M=0,则
例子 转换31.2为float.首先要写成 31.2=16*1.95 S=0,E=127+4=131 将0.95转为二进制 0.1111 0011 0011 0011 001… 结果为0 10000011 1111001100110011001
4 计算机中的编码 1.十进制数的编码—BCD码 2.字符的编码 3.汉字的编码 4. 基本数据类型
1.十进制数的编码—BCD码 计算机中采用二进制,但二进制书写冗长,阅读不便,所以在输入输出时人们仍习惯使用十进制。如果计算量不大,可采用二进制数对每一位十进制数字进行编码的方法来表示一个十进制数,这种数叫做BCD码。由于在机内采用BCD码进行运算绕过了二进制、十进制间的复杂转化环节,从而节省了机器时间。
1.十进制数的编码—BCD码 BCD码有多种形式,最常用的是8421BCD码,它是用4位二进制数对十进制数的每一位进行编码,这4位二进制码的值就是被编码的一位十进制数的值。 组合BCD码或压缩BCD码:35D:0011 0101BCD 非组合BCD码:35D:00000011 00000101 非法码: 1010 1011 1100 1101 1110 1111
2.字符的编码 在计算机中除了数值之外,还有一类非常重要的数据,那就是字符,如英文的大小写字母(A,B,C,…,a,b,c,…),数字符号(0,1,2,…,9)以及其他常用符号(如:?、=、%、+等)。在计算机中,这些符号都是用二进制编码的形式表示。 目前,一般都是采用美国标准信息交换码,它使用七位二进制编码来表示一个符号,通常把它称为ASCII码。由于用七位码来表示一个符号,故该编码方案中共有128个符号(27=128)。
3.汉字的编码 如“啊”的国标码为00110000,00100001。新的国标汉字库已包括两万多个汉字和字符。 计算机要处理汉字信息,就必须首先解决汉字的表示问题。同英文字符一样,汉字的表示也只能采用二进制编码形式,目前使用比较普遍的是我国制定的汉字编码标准GB2312-80,该标准共包含一、二级汉字6763个,其他符号682个,每个符号都是用14位(两个7位)二进制数进行编码,通常叫做国标码。 如“啊”的国标码为00110000,00100001。新的国标汉字库已包括两万多个汉字和字符。 为了与ASCII码区分,汉字在计算机中用机内码存储,在国标码基础上,加8080H得到 “啊”的机内码10110000 10100001
4. 基本数据类型 字节 字 双字 四字 双四字 7 0 15 8 7 0 高字节 低字节 31 16 15 0 高字 低字 7 0 字节 高字节 低字节 15 8 7 0 字 31 16 15 0 高字 低字 双字 四字 63 32 31 0 高双字 低双字 双四字 127 64 63 0 高四字 低四字
本节要求 二进制、十进制、十六进制数之间的转换 BCD码的表示方法 记住一些常用的ASCII码 原码、反码、补码的真值计算