您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第2章 计算机进制转换及数据编码 > 【2.1 进 制 转 换】

2.1 进 制 转 换

 

本章将介绍常用进位计数制及其相互转换,以及计算机中数的表示和运算,掌握数的原码、反码和补码的表示,熟悉ASCII码和汉字字符集及其编码,了解语音、图像、图形在计算机中的表示。

本章主要内容

&        二进制与十进制的转换

&        ASCII

&        汉字字符集及其编码

2.1 

2.1.1  计算机常用的进制

日常生活中人们计数主要使用十进制数,也辅以其他进位制数,如十二进制(以月计年)、六十进制(以分计时、以秒计分)等。计算机以二进制数为基础,在进行输入、输出、显示时也会用到其他进位制。

1.进位计数制

每种进位制都有自己的基数,即该进位制中允许使用的基本数码个数。如十进制数每个数位上允许选用012、…、910个不同数码中的一个,十进制的基数为10,每位计满10向高位进1,减到0以后从高位借110

同一个数码处在数中不同位置所代表的数值是不同的。如十进制数1234.56,最高位的1在小数点左边第四位,是千位,该位上的1代表的数值是数码1乘以103,小数点左边第三位到第一位依次是百位、十位、个位,其上的234代表的数值分别是2×1023×1014×100(即4×1),小数点右边的56分别在十分位和百分位上,所代表的数值分别是5×10-16×10-2。一般而言,每个数码所代表的数值等于该数码乘以一个常数,这个常数以基数为底,以数码所在位置的序号(小数点向左从0开始递增,小数点向右从-1开始递减)为指数的整数次幂,这就是该数位的“权”。十进制的千、百、十、个、十分位、百分位的权依次是10310210110010-110-2

1)十进制。十进制数码有10个:012、…、9;计数时逢101,借110;各位的权为10的相应次幂;左移i位相当乘以10i,右移i位相当除以10i(即×10-i)。

2)二进制。二进制数码有两个:01;计数时逢21,借12;各位的权为2的相应次幂;左移i位相当乘以2i,右移i位相当除以2i(即×2-i)。

3)十六进制。十六进制数码有16个:012、…、9ABCDEF;计数时逢161,借116;各位的权为16的相应次幂;左移i位相当乘以16i,右移i位相当除以16i。表示十六进制数时,在数的末尾加H

4)八进制。八进制数码有8个:01234567;计数时逢81,借18;各位的权为8的相应次幂;左移i位相当乘以8i,右移i位相当除以8i。表示八进制数时,在数的末尾加QO

二进制只有两个数码01,运算规则简单,表达式易用逻辑代数化简,表示相同范围的数值时节省设备,因此现代计算机无例外地采用了二进制。但二进制数书写冗长、易错、难记,书写时多用十六进制或八进制。

2.常用进位计数制间的转换

1)任意进制到十进制的转换:按权展开。

2)十进制到其他进制的转换:整数部分重复除以基数取余;小数部分重复乘以基数取整。

3)二进制与八进制、十六进制间的转换:以小数点为基准,整数部分向左3位或4位二进制数化为一位八进制或十六进制数,不足34位的添前0;小数部分向右3位或4位二进制数化为一位八进制或十六进制数,不足34位的补后0;我们将二—八或二—十六的转换方法形象地叫做三合一或四合一。

反之亦然,八—二或十六—二的转换方法为:以小数点为基准,整数部分向左、小数部分向右将一位八进制或十六进制数化成34位二进制数,再去掉无意义的前0和后0;同样,我们将八—二或十六—二的转换方法形象地叫做一分三或一分四。

常用的进位记数制之间的转换方法如图2-1所示。

2-1  进位记数制间的转换

2.1.2  原码、反码和补码

1.无符号数的表示

所谓无符号数是正数和0的集合。存储一个正数或0时,所有的位都用来存放这个数的各位数字,无须考虑它的符号,无符号数因此得名。

可以用字节、字、双字或者更多的字节来存储和表示一个无符号数。

N位二进制表示一个无符号数时,最小的数是0,最大的数是2N-1N位二进制数111111。一个字节、字、双字无符号数的表示范围分别是025506553504294967295

一个无符号数需要增加位数时,需要在它的左侧添加若干个零,称为零扩展。例如,使用一个字存储8位无符号数11010011时,低位字节置入这个无符号数,高位字节填0,结果为0000000011010011

2.有符号数的表示

计算机内用补码来表示一个有符号数,可以用字节、字、双字或者更多的字节来存储一个有符号数的补码。

补码表示法用最高有效位表示一个有符号数的符号,1表示符号为负,0表示符号为正。

符号位后的其他二进制位用来存储这个数的有效数字。正数的有效数字不变,负数的有效数字取反后最低位加1。表2-1列出了用8位二进制代码表示的部分数值的补码。

2-1  部分数据的补码

真值(十进制)

二进制表示

补码

真值(十进制)

二进制表示

补码

+127

+1111111

01111111

-1

-0000001

11111111

+1

+0000001

00000001

-2

-0000010

11111110

+0

+0000000

00000000

-127

-1111111

10000001

-0

-0000000

00000000

-128

-10000000

10000000

用一个字节存储有符号数补码时,可以表示127个正数(1127)、128个负数(-1-128)和一个000000000。其中,[-1]=11111111[-128]=10000000

如果把一个数的补码的所有位(包括符号位)取反加1,将得到这个数的相反数的补码。把取反加1这个操作称为求补,[[X]]求补=[-X]

已知一个负数的补码,求这个数自身时,可以先求出这个数相反数的补码。

一个补码表示的有符号数需要增加位数时,对于正数,需要在它的左侧添加若干个0,对于负数,则需要在它的左侧添加若干个1。上述操作实质上是用它的符号位来填充增加的高位(无论该数是正是负),称为符号扩展。例如,[-2]=111111108位)=111111111111111016[+2]=000000108位)= 000000000000001016位)。