见上例。
要把一个十进制数转换为二进制数,首先把这个数以小数点为界分为两部分。对于整数部分是对该数除以2,记下它的余数,如果其商不等于0,再对其商除以2,仍然记下余数,重复此过程,直到商为零为止。倒序(先出来的余数写在最右边,依次类推,最后的余数写在最左边)写下所有余数,这个由余数构成的序列就是这个整数对应的二进制数;对于小数部分,则需要对该小数乘以2,记下它的整数部分,去掉整数部分后,如果余下的小数部分不为零,再对小数部分乘以2,再记下其整数部分,重复此过程,直到小数部分为零为止。顺次记下每次的整数部分就是这个数小数部分的二进制结果。
把该数整数部分的二进制结果和小数部分的二进制结果组合起来就是这个数据对应的二进制结果。
值得注意的是:并不是所有的有限位十进制数都能转换成有限位二进制数,对于这种情况,根据精度要求,保留一定的精度就可以了。
例:把213.75转换为二进制,其计算方法如图1-3所示:
图1- 3十数制转换为二进制的转换方法
结果为:11010101.11
例:把0.6875转换为二进制,计算方法同上。
结果为:0.1011
虽然计算机系统采用二进制数进行信息的处理和传递,然而在实际工作中,对大多数的计算机工作者来讲,二进制存在着读写繁琐,容易串位等缺点,为了具体工作中的方便,引入了十六进制数和八进制数的概念。
(1) 十六进制数的表示
十六进制数的基数为16,具有16个数码,逢16进一,计数如下:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B……
(2) 八进制数的表示
八进制数的基数为8,具有八个数码,逢八进一,计数如下:
0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,30,31,32,33……
(3) 十六进制数、八进制数转化成十进制数
前面我们已经多次提到,在计算机内部所有的信息都以二进制的形式进行存放、处理与传送,但在书写时可以以八进制和十六进制表示,这是因为二进制与八进制和十六进制之间的转换是很方便的。
由于十六进制的基数是16,八进制的基数是8,将十六进制数和八进制数转换为十进制和对二进制数求大小的方法相同,仍然采用将各数码乘以该位的权值,然后再取和的方法。
下面我们以表格的形式列出简单数据的各种进制之间的转换关系:
表1-1 十进制、二进制和八进制的对应关系表
(4)十六进制、八进制数与二进制数的直接转换
由于2的四次幂是16,2的三次幂是8,因此一位16进制数对应与四位二进制,一位八进制数对应三位二进制数。因此:
. 为了将二进制数转化为十六进制数,只需从小数点开始向前,每四位一组划开,再从小数点向后,也是每四位一组划开,若小数点右边的最后一组不够四位,则添0补足四位,然后可以从上表中查到每一组对应的16进制数,依次写出来就可以了。同样的方法,若要将二进制数转化为八进制数,只需从小数点开始向前,每三位一组划开,再从小数点向后,也是每三位一组划开,若小数点右边的最后一组不够三位,则添0补足三位,然后从上表中查到每一组对应的八进制数,依次写出来就行了。
例:把二进制数110110111.11011转换为八进制
我们在末尾补了一个0。
例:把二进制数110110111.11011转换为16进制:
我们在末尾补了三个0。
. 如果要将八进制数转换为二进制,则只要把每个八进制位用相应的三位二进制数代替。当然,对于上表中不够三位的数据,前边以0补足。例如:八进制的1要变成001,八进制的2要变成010,等等。同理,如果要将十六进制数转换为二进制,则只要将每个十六进制位用相应的四位二进制数代替,对于上表中不够四位的数据,也是在前边以0补足。例如,16进制的1要转换为0001,16进制的2要转换为0010,等等。
由此可见,八进制或十六进制数与二进制数之间的转换极为方便,而且用八进制或者十六进制书写数据要比二进制简短,口读也方便。因此八进制或十六进制数常用于指令的书写、手编程序或者目标程序的输入、输出。特别指出的是:计算机数据的存储和传输基本上以字节为单位,一个字节包含8个二进制位,正好是两位十六进制数,因此十六进制数在计算机的程序开发和内存管理程序中得到了极为广泛的应用。
最后,需要补充说明的是,在计算机界,为了标志不同数制的数据,一般在数据末尾使用特殊的标记。以D或不标记表示十进制数据,以B表示二进制数据,以H表示十六进制数据,以O表示八进制数据。例如:18H,则表示十六进制数据18,其等价于十进制数据24。17O则表示八进制的数据17,其值等价于十进制数15。