我们在小学算术中学过,十进制数的个位(从右向左第 1 位)上的 1 表示数值 1,十位(从右向左第 2 位)上的 1 表示数值 10,百位(从右向左第 3 位)上的 1 表示数值 100,千位(从右向左第 4 位)上的 1 表示数值 1000,依此类推,从右向左第 n 位上的 1 表示的数值是 10n-1。我们把一个数从右向左第 n 位上的 1 所表示的数值大小称为该数位上的位权。
表 1 列出了十进制数、二进制数、八进制数和十六进制数各个数位上的位权大小。
计数法 | 从右向左第 n 位上的 1 表示的数值(位权) | ||||||
---|---|---|---|---|---|---|---|
第 n 位 | …… | 第 5 位 | 第 4 位 | 第 3 位 | 第 2 位 | 第 1 位 | |
十进制 | 10n-1 | …… | 10000 | 1000 | 100 | 10 | 1 |
二进制 | 2n-1 | …… | 16 | 8 | 4 | 2 | 1 |
八进制 | 8n-1 | …… | 4096 | 512 | 64 | 8 | 1 |
十六进制 | 16n-1 | …… | 65536 | 4096 | 256 | 16 | 1 |
一个十进制数所表示的数值大小就等于各个数位上的位权乘以该数位上的值(0~9)再相加得到的总和。例如:
9504=1000×9+100×5+10×0+1×4
二进制数也是同样的原理。二进制数从右向左第 1 位上的 1 表示数值 1(20),第 2 位上的 1 表示数值 2(21),第 3 位上的1表示数值 4(22),第 4 位上的 1 表示数值 8(23),依此类推,从右向左第 n 位上的 1 表示的数值是 2n-1。
二进制数各位的位权与各位上的值(0 或 1)的乘积的总和就是这个二进制数所对应的十进制数(见图 1)。例如把二进制数 101011 转换为十进制数就是:
25×1+24×0+23×1+22×0+21×1+20×1=32+0+8+0+2+1=43
同理,八进制数各位的位权(8n-1)与各位上的值(0~7)的乘积的总和就是这个八进制数所对应的十进制数(见图 2)。例如把八进制数 1753 转换为十进制数就是:
83×1+82×7+81×5+80×3=512+448+40+3=1003
十六进制数各位的位权(16n-1)与各位上的值(0~F)的乘积的总和就是这个十六进制数所对应的十进制数(见图 3)。例如把十六进制数 27DB 转换为十进制数就是:
163×2+162×7+161×13+160×11=8192+1792+208+11=10203
利用二进制数各位的位权,可以把一个二进制数转换为十进制数,那么如果要知道十进制数所对应的二进制数是多少,该怎么办呢?
我们通常使用辗转相除求余法来得到一个十进制数所对应的二进制数,具体的操作步骤如下:(见图 4)
同样的原理,用 8 作为除数对一个十进制数进行辗转相除,把得到的所有余数从右向左依次排列,可以得到这个十进制数对应的八进制数(见图 5)。
用 16 作为除数对一个十进制数进行辗转相除,把得到的所有余数从右向左依次排列,可以得到这个十进制数对应的十六进制数(见图 6)。
当把二进制数转换为八进制数或十六进制数时,可以先把二进制数转换为十进制数,然后再把这个十进制数转换为八进制数或十六进制数;反过来,八进制数或十六进制数转换为二进制数时,则先把它转化为十进制数,再把这个十进制数转换为二进制数;八进制数与十六进制数之间的相互转换也是如此。
除此之外,我们也可以利用前面讲过的各个数位上的位权,把二进制数直接转换为八进制数或十六进制数。要进行这种直接转换需要了解二进制数与八进制数、十六进制数之间的特殊关系:
1) 八进制数的各位可以取 0~7 这几个值,这正好是用 3 位二进制数(000~111)能表示的值(见表 2):
二进制数 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|---|
八进制数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2) 十六进制数的各位可以取 0~F 这几个值,这正好是用 4 位二进制数(0000~1111)能表示的值(见表 3):
二进制数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
十六进制数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
因此我们可以总结出下面的特殊关系:二进制数的 3 位相当于八进制数的 1 位,二进制数的 4 位相当于十六进制数的 1 位。
所以当把二进制数转换为八进制数时,可以从低位起(从右向左)把二进制数划分为每 3 位一个区间,再把每个区间内的 3 位二进制数转换为对应的十进制数,这样最终得到的数就是这个二进制数对应的八进制数。当把二进制数转换为十六进制数时,可以从低位起(从右向左)把二进制数划分为每 4 位一个区间,再把每个区间内的 4 位二进制数转换为对应的十进制数(10~15 用 A~F 表示),这样最终得到的数就是这个二进制数对应的十六进制数(见图 7)。
反过来,把八进制数转换为二进制数时,将八进制数的各位变换为 3 位二进制数,就得到了这个八进制数对应的二进制数;把十六进制数转换为二进制数时,将十六进制数的各位变换为 4 位二进制数,就得到了这个十六进制数对应的二进制数(见图 8)。