【微机原理】基础知识(二)数制和编码
计算机中的数及其编码
1 机器数和真值
机器数是一个数在计算机中的表示形式,这个数(包括符号)则称为真值。真值可以用二进制或十进制表示。
例如,\(N1=+1101001B=+105\),则 \(N1\) 的机器数为 01101001。
2 有符号数与无符号数
有符号数的最高位是符号位,其余位表示数值大小。最高位是 0 表示正数,最高位是 1 表示负数。无符号数所有的位都用来表示数值大小。
例如,机器数 11001011 如果是有符号数,则其真值为 -75,如果是无符号数,则其真值为 203。
3 原码、反码和补码
计算机对数据进行处理时,需要把符号位和数值位一起进行编码,这时就需要用到原码、反码和补码。
原码、反码、补码是机器数的三种编码方案。
3.1 原码
原码是机器数的一种编码表示形式。原码表示的数不利于计算机进行加减运算,因为计算机需要先判断数的符号,然后再决定用加法还是减法,这样会使运算过程变得复杂。为了解决这个问题,引入了反码和补码。
3.2 反码
正数的反码就是其原码,负数的反码是原码除符号位外各位取反。
3.3 补码
正数的补码就是其原码,负数的补码是其反码加1。
| 原码 | 反码 | 补码 |
|---|---|---|
| 01101001 | 01101001 | 01101001 |
| 10100110 | 11011001 | 11011010 |
引入补码的目的是把加减法运算转化成单纯的加法运算。为理解这个转化过程,需要了解模的概念。
模是一个计数器能表示的数的个数,例如一个 8 位二进制计数器,可以表示的数的范围是 0 到 255,则模是 256。如果计数器到最大值后再加 1,则会发生溢出,例如 255 加 1 为 256,但 11111111 再加 1 就会溢出变成 00000000。因此,256 和 0 在模 256 的系统里的表示形式是一样的。
这里可以类比时钟,来更好地理解模和补码。由于时钟能表示的数的个数是 12,所以模是 12,则 0 点和 12 点是同一个时间点。
假设现在时钟显示的时间是 9 点,如果想把时间调到 6 点,可以逆时针调 3h(记为 -3),也可以顺时针调 9h(记为 +9)。则 9-3=6,9+9=12+6,这里将 -3 的减法运算转化成 +9 的加法运算,-3 的补码是 +9。
同理,在模 256 的系统中计算 5-3=2,先把 -3 转化成补码 +253,则 5+253=258=256+2,这里也是把 -3的减法运算转化成 +253的操作。同时,可以注意到,在模 M 系统中,负数补码 = 模 − 绝对值;减法等价于加上补码。
4 数的定点和浮点表示方法
计算机中,数有两种表示方法,即定点表示法和浮点表示法。所谓定点表示法,就是小数点在数中的位置是固定不变的;所谓浮点表示法,就是小数点在数中的位置是浮动的。
对于任意一个二进制数,总可以表示为 \(N=2^P \times S\) 的形式,其中 S 称为该数的尾数,P 称为该数的阶码,2 称为阶码的底。尾数 S 表示数 N 的全部有效数字,阶码 P 指明小数点的位置。
这里可以类比科学计数法,不同的是科学计数法是 10 进制。例如 \(123.45=1.2345 \times 10^2\)。其中尾数 S 为 1.2345,表示有效数字;阶码 P 为 2,表明小数点左移了 2 位。
4.1 定点表示法
当阶码P为固定值时,这样的数称为定点数。计算机中常用的定点数有两种:
(1)定点纯整数:当P=0,且尾数S为纯整数时,只能表示纯整数。此时把小数点固定在最低数值位右边,最高位为符号位,小数点本身不占位。
(2)定点纯小数:当P=0,且尾数S为纯小数时,只能表示纯小数。此时把小数点固定在最高数值位左边,即符号位右边,小数点本身不占位。
例如,8位二进制数11010100,若是定点纯整数,则为11010100.0B 即 -84;若是定点纯小数,则为-0.1010100B(最高位1为符号位),即 -0.65625。
定点数的小数点是隐含的,其位置由程序员预先设定好。由于小数点位置固定,定点数所表示的范围小、精度低。例如8位带符号定点整数,最大只能表示到127。
4.2 浮点表示法
如果阶码 P 不固定,且可在一定范围内取值,这样表示的数称为浮点数。为了在位数有限的前提下尽量扩大数的表示范围,同时保持数的有效精度,计算机往往采用浮点数表示数值。
目前众多计算机厂家采用的是 IEEE 标准规定的浮点数表示方式,单精度为 32 位,双精度为 64 位,Pentium 系列处理器采用的就是这种浮点表示方法。
单精度浮点数的32位分为三部分:
| 符号位S(1位) | 阶码E(8位) | 尾数M(23位) |
|---|
S 为符号位,S=0 表示正数,S=1 表示负数。
E 为带偏移量的指数,单精度偏移量为127。因为指数有正的也有负的,带偏移量是为了使指数都为正数,减少数据处理的复杂度。
M 为尾数,表示成规格化形式时,其整数部分和小数点被隐含起来,机器中只保存小数部分。规格化就是把小数点移到第一个非 0 数字的右边,因为二进制的非 0 数字只能是 1,所以表示成规格化形式后都是 1.xxx 的格式,所以整数部分和小数点可以隐含起来,只保存小数部分。
下面举一个例子,以更好地理解单精度浮点数。
将十进制数 219.125 表示成单精度浮点数:
第一步,将十进制数化成二进制数:\(219.125=11011011.001B\);
第二步,将二进制数化成规格化形式:\(11011011.001=1.1011011001\times2^7\),指数为7;
第三步,指数加上偏移量得到阶码:\(E=7+127=134=10000110B\);
第四步,写出浮点数:符号位为 0 ,阶码为 10000110,尾数为 10110110010000000000000。
浮点数和定点数相比,浮点数表示的范围大、精度相对较高,但硬件实现较复杂;定点数硬件简单,但范围小、精度低。
5 二进制编码
5.1 二进制编码的十进制数(BCD码)
计算机内部多采用二进制运算,但二进制数书写起来很长、读起来也不方便。考虑到人们的习惯,数在送入机器之前仍采用十进制编码,运算结果也以十进制输出,这项转换工作一般由机器来完成,因而产生了一种适合十进制数的二进制代码的特殊形式,即二进制编码的十进制数,简称BCD码(Binary Coded Decimal)。
BCD 码用 4 位二进制位来表示 1 位十进制数,它指定 4 位二进制位从 0000 到 1111 共 16 种组合中的前 10 种依次表示 0~9 的 10 个十进制数码,余下最后 6 种组合不用。
BCD 码有两种形式,即压缩BCD码和非压缩BCD码。
(1)压缩BCD码:每一位十进制数用 4 位二进制位表示,一个字节表示两位十进制数。
(2)非压缩BCD码:用 1 个字节来表示一位十进制数,高 4 位总是 0000,低 4 位为 0000~1001 之间的数。
两种BCD码的部分编码见下表。
| 十进制数 | 压缩BCD码 | 非压缩BCD码 |
|---|---|---|
| 0 | 0000 | 00000000 |
| 1 | 0001 | 00000001 |
| 7 | 0111 | 00000111 |
| 9 | 1001 | 00001001 |
要注意,BCD码与真正的二进制数是不同的,它貌似二进制,实为十进制。通常用在计算机的输入/输出设备中,作为计算机用的二进制与人们日常用的十进制之间的一种过渡性编码。
5.2 字母和字符的编码(ASCII码)
从键盘上输入的命令和数据,多数为英文字母、标点符号和某些特殊符号,都是非数值数据。计算机只能存储二进制位,这就需要用二进制对各种字符进行编码,以二进制代码形式存入计算机。
目前国际上经常采用的字符编码是ASCII码(American Standard Code for Information Interchange),目前微型计算机的字符编码都采用ASCII码。ASCII码用7个二进制位对字符进行编码,共有128个字符。由于内存存储信息采用字节单元,因此将每个ASCII码最高位补0或作为奇偶校验位,形成一个字节。
ASCII码的128个字符可以分为两类:
(1)非打印的码:这类编码是控制信息,共有34个。例如DEL(删除)、CR(回车)、SP(空格)等。
(2)可打印的ASCII码:共有 94 个。其中数字 0~9 的编码为 30H~39H,大写字母 A~Z 的编码为 41H~5AH,小写字母 a~z 的编码为 61H~7AH。
部分符号的 ASCII 码见下图。
参考资料
[1] 许立梓. 微型计算机原理及应用[M]. 北京: 机械工业出版社.
文中图片均摘录自[1],仅用于学习交流,如侵权请联系删除.
浙公网安备 33010602011771号