数据表示和类型
1.2.1 进位计数制以及不同计数制间的相互的转换
在日常生活中我们所用的是十进制数,但在计算机中我们用的是二进制数,作为汇编语言程序设计对二进制数与十进制数的转换是必不可少的。
1. 各种进位计数制
表1.1 二、八、十和十六进制数码的对照关系表
十进制 |
二进制 |
八进制 |
十六进制 |
0 |
0 |
0 |
0 |
1 |
01 |
1 |
1 |
2 |
10 |
2 |
2 |
3 |
11 |
3 |
3 |
4 |
100 |
4 |
4 |
5 |
101 |
5 |
5 |
6 |
110 |
6 |
6 |
7 |
111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
(1)十进制数
十进制数就是我们在日常生活中所用的数,它共有0,1,2,3,4,5,6,7,8,9这十个数码,它的计数方法是“逢十进一”。对于十进制数的运算大家应该都知道,这里就不多说了。
(2)二进制数
二进制数是最简单的进位计数制,它只有0,1二个数码,计数方法是“逢二进一”。二进制数的运算十分简单,加法是“逢二进一”,减法是“借一当二”。例如“11 10=101;101-10=11”至于乘法和除法和我们日常相似,只不过不是“逢十进一”而是“逢二进一”罢了。
(3)八进制数和十六进制数
很显然八进制数是0到7这八个数码组成,且是“逢八进一”,而十六进制数是由0到9和A,B,C,D,E和F(英语大写字母分别代表10到15)这十六个数码组成的,它的进位方式是“逢十六进一”。在下面我将给出二,八,十和十六进制数码的对照关系表。如表1.1所示:
2.数制的转换
(1)将十进制数转换成二进制数
例 试将十进制数 125.6875转换成二进制数。
①整数的转换:除2取余
先将125除以2在右边记下余数,然后以此类推,直到最后的差为0,最后我们将余数倒着排列即得结果。
②小数的转换:乘2取整
小数的转换正好与整数的转换相反,先将0.6875乘以2得结果1.3750,则在右边记下整数位1,再将去整数位后的0.375乘以2记下结果,依此类推,直到最后小数部分为0或结果以达到精度要求。
(2)将十进制数转换成八/十六进制数
方法如上,只不过乘/除数为8或16。
(3)二,八/十六进制数转换成十进制数
转换方法是利用数制的一般表达式写成相应的幂运算形式,然后求和得到。
例:572.34(8)=5*82 7*8 2 3*8-1 4*8-2=378.4375
(4)二进制数与八进制数的转换
因为23=8,所以二进制数转换成八进制数只需将二进制数从小数点开始每3位转成一位八进制数(整数由左向右,小数相反)。 例如:101 111 010 . 011 100(2) =572.34(8)
八进制数转换成二进制数只需将每一位八进制数用三位二进制数表示,小数点位置不变。 例如:175.54(8)=001 111 101.101 100B=1111101.1011B。
至于十六进制数与二进制数的转换只需将每隔3位改为每隔4位即可。
1.2.2 原码,补码和反码
在计算机中参加运算的数有正负之分,通常在计算机中我们用X=X0X1X2``````XN-1来表示一个二进制数,并规定当X0=0时X为正数,X0=1时X为负数.在计算机中这种表示法有原码,补码和反码三种。
1. 原码
原码的定义为:
所能表示数的范围为:
例: 根据[X](原)所能表示的整数范围公式,我们可以计算出当n=8时,原码表示范围是[-127,127]。原码的表示法简单易懂,但是它最大的缺点是运算复杂。所以人们引进了补码。
2. 补码
补码的定义为:
所能表示数的范围为:
例: 根据[X](补)所能表示的整数范围公式我们可以计算出当n=8时补码表示范围是[-128,127];根据补码的定义公式我们可以计算出任何一个数的补码,如X=-2FH根据公式[X](补)=100H-2FH=D1H。
用补码进行加减运算是很简单的,公式为[X Y]补=[X]补 [Y]补;[X-Y]补=[X]补 [-Y]补。加法公式是非常简单的,但减法中我们只知道[Y]补而不知道[-Y]补,利用一个口诀就可解决这个问题,口诀是"将[Y]补连同符号位一起按位求反后末为加一可得[-Y]补"。我们现在虽然有了公式和口诀,但是还有符号位的问题没有解决,而另一个口诀可以解决这个问题。口诀是"符号位参加运算,符号位相加,若有进位,则进位舍去"。如:63H-72H=63H 8EH=0F1H(用十六进制时最高位为字母时前加0)。
注意:运算有时会产生溢出,如57 81>127。当我们用N=8的补码运算就会溢出,因为当字长N=8时补码的表示范围是 [-128,127]。
3. 反码
反码的定义为:
所能表示数的范围为:
例: 根据[X](反)所能表示的整数范围公式,我们可以计算出当n=8时反码表示范围是 [-127,127]。
1.2.3 数的定点和浮点表示法
在计算机中,针对小数点的处理有两种方法:定点表示法浮点表示法。
1. 定点表示法
定点表示法就是小数点固定在某个位置上。在定点计算机中,为了简单通常将小数点定在最高位(即纯小数)或将小数点定在最低位(即整数)。
2. 浮点表示法
浮点表示法就是小数点的位置并不固。浮点数在计算机中通常的表示形式为"浮点数=2的正/负阶码次方*尾数"其中阶码是个正整数,尾数是个小数,我们规定尾数的区间为[0.5,1],如果尾数不在此区间,那我们可通过调节阶码来满足区间,此方法称为规格化。
1.2.4 BCD码和字符编码
在日常生活中人们用的是十进制数,而机器又只能处理二进制数,因此我们引进了BCD码。BCD码是用四位的二进制数来表示一位十进制数(可参照下表)。例子:我现在将8351表示成BCD码为1000 0011 0101 0001。当用一个字节来表示十进制数时,称为非压缩的BCD码。例如6可表示为00000110。当用一个字节表示二个十进制数时,称为压缩的BCD码。例如79可表示为01111001。
除了数值数据外,计算机还可处理人们常用的符号,如字母,标点符号等。在计算机中这些符号是用ASCII码来表示的。ASCII码用一个字节的二进制数来表示一个字符,但实际只用了七位,最高位被用来做奇偶校验位。这一位置1或0,使字节含1的个数为奇数(或偶数)称为奇校验或偶校验。如表1.2十进制数与BCD码对换关系表。
表1.2 十进制数与BCD码对换关系表
十进制数 |
BCD码 |
十进制数 |
BCD码 |
0 |
0000 |
5 |
0101 |
1 |
0001 |
6 |
0110 |
2 |
0010 |
7 |
0111 |
3 |
0011 |
8 |
1000 |
4 |
0100 |
9 |
1001 |