大学计算机基础教程
上QQ阅读APP看书,第一时间看更新

1.2.3 数据的表示与数制

1.二进制数据的表示

二进制具有物理实现性价比高、运算法则简单,容易存储等优点。计算机如何在物理上表示二进制呢?主要的方法还是采用电信号表示,高电压表示1,低电压表示0,如图1-24所示。

图1-24 二进制方波表示

2.数制

数制不仅是计算机出现时才有的,实际上中国除了使用十进制外,还有十六进制,1949年以前使用的称量衡器,就是十六两等于一斤,所以才有“半斤八两”这个成语。在时间上采用的是60进制,60秒等于1分钟。这些进制的产生有着其历史和客观的原因,有些已经形成习惯。

由于计算机内部采用的是二进制编码,但计算机与外部的信息交流依然采用大家所熟悉和习惯的形式,通常采用十进制数据来表示数值。这样计算机和人之间就必须要通过“翻译”。二进制和十进制之间的“翻译”是需要损耗系统资源的,尤其是时间的代价。下面介绍几个概念:

数制:按进位的方法进行计数,称为进位计数制,简称数制。如果某个数制采用R个基本符号,则称其为基R数制,R称为数制的基数。不同的数制在基数规则、进位规则、位权规则和运算规则等方面也不相同。

基数:是指某种数制中可能用到的计数符号的个数。如十进制数有0~9十个基数。

位权:不同位数上的计数符号所表示的数值大小是不同的,它的实际数值是计数符号乘以某一固定的常数,这个常数称为位权,简称权。如25=2×101+5×100,101和00

分别为对应位的位权。

进位:如十进制数是逢十进一,二进制数是逢二进一,等等。

任何一种进位制都可以用下面的规则来描述:基数规则、进位规则、位权规则、运算规则。常用的数制有十进制、二进制、八进制、十六进制。它们的特点如表1-2所示。

表1-2 四种数制的特点比较

例如,(256.15)D=2×102+5×101+6×100+1×10-1+5×10-2

(1101)B=1×23+1×22+0×21+1×20

3.数制之间的转换

在计算机内部的运算采用二进制数,但人们的习惯是十进制数,为了方便,在输入和输出采用十进制数,由计算机完成二进制与十进制之间的转换。这就需要了解不同数制间的转换问题。表1-3所示为常用计数制数之间的对应关系。

表1-3 常用计数制数之间的对应关系

(1)R进制转换为十进制

方法:按权展开求和

基数为R的数值,只需将各位数字与相应的权值相乘,再将其积相加后,各数就是对应的十进制值。

【例1】二进制转换为十进制。

(110101.0101)B=1×25+1×24+0×23+1×22+0×21+1×20+0×2-1+1×2-2+0×2-3+1×2-4

        =(53.3125)D

【例2】八进制转换为十进制:

(3506.2)O=3×83+5×82+0×81+6×80+2×8-1=(1862.25)D

【例3】十六进制转换为十进制。

(71.E)H=7×161+1×160+E×16-1=(113.875)D

各种数制转换成十进制的方法:按权展开。

(2)十进制转换为R进制

将十进制转换为基数为R的数制时,将其整数部分和小数部分分别加以转换,然后再合并起来即可。

十进制整数部分转换为基数为R的数制的转换方法为:“除R取余”;十进制小数部分转换为基数为R的数制转换方法为:“乘R取整”。

当对十进制小数部分连续地乘以R时,若小数部分最后乘至为零,则转换结束;小数部分也可能永远不能乘至为零,则达到所要求的精度即可。

【例4】将(215.3125)D转换为二进制数。

得到:(215)D=(11010111)D。

得到:(0.3125)D=(0.0101)B

将整数部分和小数部分合并在一起,得到:(215.3125)D=(11010111.0101)B。

【例5】将十进制数(125.275)D转换成十六进制数。

方法:整数部分除16取余法,小数部分乘16取整法。

所以,(125.275)D=(7D.46)H。

(3)二进制、八进制、十六进制的相互转换

二进制、八进制、十六进制之间的相互转换在实际应用中是需要加以掌握的。例如,计算机中的许多设备参数设置值往往是用十六进制表示的,用户便需要对其加以转换才容易理解。

由于二、八、十六进制三种数制的权值有以下的内在联系:23=8,24=16,也就是说3位二进制相当于1位的八进制数,4位二进制数相当于1位16进制数,因而它们之间的转换便较容易实现。首先我们需要掌握表1-4中所列的各类进制数中基数值的相互对应关系。

二进制、八进制的相互转换:

①八进制转换为二进制:每位八进制数对应于三位二进制数。

②二进制转换为八进制:对二进制整数部分从低位向高位分组,每三位一组;小数部分从高位向低位分组,每三位一组,不足补零。然后写出每组对应的八进制基数即可。

【例6】八进制数化为二进制数:(7123.63)O=(?)B

【例7】二进制数化为八进制数:(1101101110)B=(?)O

二进制转换为八进制的过程是相似的,也就是上例的逆向过程。

八进制、十六进制的相互转换:

①十六进制转换为二进制:每位十六进制数对应于四位二进制数;

②二进制转换为十六进制:对二进制整数部分从低位向高位分组,每四位一组;小数部分从高位向低位分组,每四位一组,不足补零。然后写出每组对应的十六进制基数即可。

【例8】十六进制数转换为二进制数:(2C1D)H=(?)B

【例9】二进制数转换为十六进制数:(1101101110)B=(?)H