我们曾经指出为了便于二进制数和十进制数的转换,也为了在书写时更加简便易读,二进制数经常要转换成8进制数和16进制数。这里我们考查2进制数和8进制数之间的转换关系。
设有一个9位二进制数(k8k7k6k5k4k3k2k1k0)2,根据数制的定义,我们知道:
(k8k7k6k5k4k3k2k1k0)2=k8×28+k7×27+k6×26+k5×25+k4×24+k3×23+k2×22+k1×21+k0×20 (式2-16)
式2-16可以进一步写成:
k8×28+k7×27+k6×26+k5×25+k4×24+k3×23+k2×22+k1×21+k0×20
=(k8×22+k7×21+k6×20)×26+(k5×22+k4×21+k3×20)×23+k2×22+k1×21+k0×20
=(k8×22+k7×21+k6×20)×82+(k5×22+k4×21+k3×20)×81+(k2×22+k1×21+k0×20)×80 (式2-17)
上面的式子中,k8×22+k7×21+k6×20相当于(k8 k7 k6)2,假定其等于十进制数h2;k5×22+k4×21+k3×20相当于(k5 k4 k3)2,假定其等于十进制数h1;k2×22+k1×21+k0×20相当于(k2 k1 k0)2,假定其等于十进制数h0。则式2-17可以改写为:
h2×82+h1×81+h0×80 (式2-18)
由于h2 、h1、 h0是三位二进制数的值,因此,其值的范围在0~7之间。根据数制的定义,我们惊奇地发现式2-18相当于(h2 h1 h0)8。这就是说:
(k8k7k6k5k4k3k2k1k0)2=(h二进制与十六进制之间的转换2 h1 h0)8 (式2-19)
这里,h2=(k8k7k6)2;h1=(k5k4k3)2;h0=(k2 k1 k0)2。
这就是说,我们只要把一个九位的二进数从低位开始三位一组,分成三组,将这三组二进制数分别转换成10进制数,所得的三个数就是该二进制数所对应的8进制数的码。这种关系可以一直往高位推导,即不管二进制数有多少位我们都可以用这种方法把它转换成一个8进制数。
例2-6:将二进制数(10111001010)2转换为8进制数。
解:将二进制数三位一组分组,计算每组的值如下:
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | |
2 | 7 | 1 | 2 | ||||||||
则:(10111001010)2 =(2712)8
需要注意的是,整数的分组是从最低位开始,向最高位延伸。如果最高位的组不足三位,则在前面补0。另外,这种转换同样适用于小数的转换。小数的分组,是从最高小数位开始,向低位延伸。如果最低位的组不足3位,在后面补0。
例2-7:将二进制数(10111001010.10101)2转换为8进制数。
解:将二进制数三位一组分组,计算每组的值如下:
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 。 | 1 | 0 | 1 | 0 | 1 | 0 | |
2 | 7 | 1 | 2 | 。 | 5 | 2 | ||||||||||||
则:(10111001010.10101)2 =(2712.52)8
仿照2进制转8进制数的推导方法,我们不难得到二进制数与16进制数的转换方法(有关演算留作习题,这里从略)。具体来说就是,将二进制数的整数和小数部分每四位分成一组。整数部分从最低位向最高位顺序分组,如果最高位组不够4位,就在前面补0;小数部分从最高位向最低位顺序分组,如果最低位组不够4位,在后面补0。求出每一组4位二进制数的十进制值(在0~15之间),然后用16进制符号表示,就得到了相应的16进制数。
例2-8:将二进制数(10111001010.10101)2转换为16进制数。
解:将上述二进制数四位一组分组,计算每组的值如下:
0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 。 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
5 | 12 | 10 | 。 | 10 | 8 | |||||||||||||||
则:(10111001010.10101)2 =(5CA.A8)16
上面将二进制数转换为8进制数和16进制数的规则,反过来也可以用来将8进制和16进制数转
换为2进制数。请看下面的例子。
例2-9:将8进制数(567.72)8转换为2进制数。
解:将上述八进制数的每一位分解成一个3位二进制数,最后得到就是该8进制数对应的二进制数。具体计算如下:
5 | 6 | 7 | . | 7 | 2 | ||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | . | 1 | 1 | 1 | 0 | 1 | 0 |
则:(567.72)8=(101110111.111010)2
例2-10:将16进制数(9F.B6)16转换为2进制数。
解:将上述16进制数的每一位分解成一个4位二进制数,最后得到就是该16进制数对应的二进制数。具体计算如下:
9 | F | . | B | 6 | ||||||||||||
1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | . | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
则:(9F.B6)16=(10011111.1011011)2
现在,作为练习,请检验例2-1到例2-5中同一个十进制数的2进制与8进制、16进制之间的对应关系是否符合上面的转换规律。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论