1.2 数制及其转换
1.2.1 进位计数制
数制是人们对数量计数的一种统计规律。日常生活中广泛使用的是十进制,而数字系统中使用的是二进制。
1. 十进制
十进制中采用了0、1、…、9共10个基本数字符号,进位规律是“逢十进一”。当用若干个数字符号并在一起表示一个数时,处在不同位置的数字符号,其值的含义不同。例如,
同一个字符8从左到右所代表的值依次为800、80、8,即十进制数888可以表示成(888)10=8×102+8×101+8×100。
十进制的特点可以推广到任意进制。广义地说,一种进位计数制包含着基数和位权两个基本的要素。基数是指计数制中所用到的数字符号的个数,位权是指在一种进位计数制表示的数中,用来表明不同数位上数值大小的一个固定常数。不同数位有不同的位权,某一个数位的数值等于这一位的数字符号乘上与该位对应的位权。例如,十进制数的位权是10的整数次幂,其个位的位权是100,十位的位权是101……
2. R进制
任意R进制中包含0、1、…、R-1共R个数字符号,进位规律是“逢R进一”。R进制数的位权是R的整数次幂。
一个R进制数N可以有以下两种表示方法:
① 并列表示法(又称位置计数法),其表达式为
(N)R=(Kn-1Kn-2…K1K0.K-1K-2…K-m)R
② 多项式表示法(又称按权展开法),其表达式为
式中:
R——基数;
n——整数部分的位数;
m——小数部分的位数;
Ki——R进制中的一个数字符号,其取值范围为0≤Ki≤R-1(-m≤i≤n-1)。
R进制的特点可归纳如下。
① 有0、1、…、R-1共R个数字符号。
② “逢R进一”,“10”表示R。
③ 位权是R的整数次幂,第i位的权为Ri (-m≤i≤n-1)。
3. 二进制
二进制中只有0和1两个基本数字符号,进位规律是“逢二进一”,“10”表示2。二进制数的位权是2的整数次幂。
任意一个二进制数N可以表示成
式中:
n——整数位数;
m——小数位数;
Ki——为0或者1,-m≤i≤n-1。
例如,一个二进制数1101.101可以表示成
(1101.101)2=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3
二进制数的运算规则如下。
二进制的优点:运算简单、物理实现容易、存储和传送方便、可靠。
因为二进制中只有0和1两个数字符号,可以用电子器件的两种不同状态来表示一位二进制数。例如,可以用晶体管的截止和导通表示1和0,或者用电平的高和低表示1和0等。所以,在数字系统中普遍采用二进制。
二进制的缺点:数的位数太长且字符单调,使得书写、记忆和阅读不方便。因此,人们在进行指令书写、程序输入和输出等工作时,通常采用八进制数和十六进制数作为二进制数的缩写。
4. 八进制
基数R=8的进位计数制称为八进制。八进制数中有0、1、…、7共8个基本数字符号,进位规律是“逢八进一”。八进制数的位权是8的整数次幂。
任意一个八进制数N可以表示成
式中:
n——整数位数;
m——小数位数;
Ki——0~7中的任何一个字符,-m≤i≤n-1。
5. 十六进制
基数R=16的进位计数制称为十六进制。十六进制数中有0、1、…、9、A、B、C、D、E、F共16个字符,其中,A~F分别表示十进制数的10~15。进位规律为“逢十六进一”。十六进制数的位权是16的整数次幂。
任意一个十六进制数N可以表示成
式中:
n——整数位数;m——小数位数;Ki——表示0~9、A~F中的任何一个字符,-m≤i≤n-1。
表1.1列出了十进制数0~15对应的二进制数、八进制数和十六进制数。
表1.1 十进制数与二、八、十六进制数对照表
1.2.2 数制转换
数制转换是指将一个数从一种进位制转换成另一种进位制。从实际应用出发,要求掌握二进制数与十进制数、八进制数和十六进制数之间的相互转换。
1. 二进制数与十进制数之间的转换
(1)二进制数转换为十进制数
二进制数转换为十进制数采用多项式替代法,即将二进制数表示成按权展开式,并按十进制运算法则进行计算,所得结果即为该二进制数对应的十进制数。
例如,(10111.001)2=(?)10。
(10111.001)2=1×24+1×22+1×21+1×20+1×2-3=16+4+2+1+0.125=(23.125)10
(2)十进制数转换为二进制数
十进制数转换成二进制数采用基数乘除法。转换时对整数和小数应分别进行处理,整数转换采用“除2列余”的方法,小数转换采用“乘2取整”的方法。
① 整数转换——“除2列余”法:将十进制整数N除以2,取余数计为K0;再将所得商除以2,取余数记为K1;……以此类推,直至商为0,取余数计为Kn-1为止,即可得到与N对应的n位二进制整数Kn-1…K1K0。
例如,(35)10=(?)2。
即 (35)10=(100011)2。
② 小数转换——“乘2取整”法:将十进制小数N乘以2,取积的整数部分记为K-1;再将积的小数部分乘以2,取整数部分记为K-2;……依此类推,直至其小数部分为0或达到规定精度要求,取整数部分记作K-m为止。即可得到与N对应的m位二进制小数0.K-1K-2…K-m。
例如,(0.8125)10=(?)2。
即 (0.8125)10=(0.1101)2。
注意
当十进制小数不能用有限位二进制小数精确表示时,可根据精度要求,求出相应的二进制位数近似的表示。一般当要求二进制数取m位小数时,可求出m+1位,然后对最低位作0舍1入处理。
例如,(0.7125)10=(?)2(保留4位小数)。
即 (0.7125)10 ≈(0.1011)2。
若一个十进制数既包含整数部分,又包含小数部分,则需将整数部分和小数部分分别转换,然后通过小数点将两部分结果连到一起。
例如,(25.625)10=(?)2。
即 (25.625)10=(11001.101)2。
2. 二进制数与八进制数、十六进制数之间的转换
(1)二进制数与八进制数之间的转换
由于八进制的基本数字符号0~7正好和3位二进制数的取值000~111对应,所以,二进制数与八进制数之间的转换可以按位进行。
二进制数转换成八进制数时,以小数点为界,分别往高、往低分组,每3位为一组,最后不足3位时用0补充,然后写出每组对应的八进制字符,即为相应八进制数。
例如,(11110101.01111)2=(?)8。
即 (11110101.01111)2=(365.36)8。
八进制数转换成二进制数时,只需将每位八进制数用3位二进制数表示。
例如,(52.3)8=(?)2。
即 (52.3)8=(101010.011)2。
(2)二进制数与十六进制数之间的转换
二进制数与十六进制数之间的转换同样是按位进行的,只不过是4位二进制数对应1位十六进制数,即4位二进制数的取值0000~1111分别对应十六进制字符0~F。
二进制数转换成十六进制数时,以小数点为界,分别往高、往低分组,每4位为一组,最后不足4位时用0补充,然后写出每组对应的十六进制字符即可。
例如,(1101010.1011)2=(?)16。
即 (1101010.1011)2=(6A.B)16。
十六进制数转换成二进制数时,只需将每位十六进制数用4位二进制数表示。
例如,(8F.9)16=(?)2。
即 (8F.9)16=(10001111.1001)2。