一、什么是进制转换
我们先看看平时我们是如何计数的:0、1、2、3、4、5、6、7、8、9,当超过9的时候就是10,此时10变成了2位数,而这两位数又是由一位的0、1组成的。在计算机中,我们将这种遇到9往前增加一位的方式叫做十进制。因为当为一位的时候他有10个数可用。
在生活当中到处都存在类似的案例,例如我们的一周:周一、二、三、四、五、六、日,此时又会回到周一,他有七天,我们可以将其称为七进制。
而计算机是由电路组成的,而电路只有开、关两种状态,所以我们将其称为二进制;用数字表示就是0和1;0表示关,1表示开。
上面提到的十进制的10或者二进制的2,这个10和2我们叫做基数 ;在十进制中的0 ~ 9,二进制中的0 ~ 1,我们叫做数码 ;开始都是一位数,当达到数码中的最大数时,会变为二位数,同理也会变为三位数,这样变化的位数我们叫做位权。
根据上面的介绍我们将计算机中常见的四种进制使用表格进行对比:
进制 | 基数 | 数码 | 位权 |
---|---|---|---|
十进制(D) | 10 | 0,1,2,3,4,5,6,7,8,9 | 10k |
二进制(B) | 2 | 0,1 | 2k |
八进制(O) | 8 | 0,1,2,3,4,5,6,7 | 8k |
十六进制(H) | 16 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F | 16k |
注意:在十六进制中,由于10为两位为了区分使用A对应,往后推 F代表15,即达到十六进制数码的最大值,此时再往后即进一位。
为了识别一个数是以什么进制来表示,我们会添加不同的后缀,其中十进制的后缀可以省略。123(O)和123(H)表示的就是不同数。
二、为什么要进行进制转换
同样一个数,我们普通人看到的和计算机看到的是不一样的。上面我们说过计算机由于是电路组成的,他只能认识0和1,而我们作为人可以认识0、1以外的数字,那我们如何要让计算机也认识这些数字呢?这就需要进行进制转换,转换为计算机能识别的二进制来表示。
三、如何进行进制转换
3.1 按权展开法
我们先来看一个十进制数 123.01。
通过上面的基数、数码、位权我们可以进行拆分:123.01 = 1 × 102 + 2 × 101 + 3 × 100 + 0 × 10-1 + 1 × 10-2 = 123.01(D)
由上面的等式我们可以总结几点:
1、对于位权,小数点左边从0开始数,小数点右边从-1开始数。
2、一个数的每一位数码直接拿出来乘以位权来计算。
3、基数根据进制来变化。
若123.01表示八进制,那么从我们人的角度可以理解的具体是哪个数呢?我们来看看:
123.01(O) = 1 × 82 + 2 × 81 + 3 × 80 + 0 × 8-1 + 1 × 8-2 = 64 + 16 + 3 + 0 + 0.015625 = 83.015625(D)
从上面等式我们知道了八进制的 123.01 就表示我们平时看到的 83.015625。
这种转换的方式就叫做按权展开法,一般用来将其他进制转为十进制使用。
通过上面的两个数转换,我们会发现除了基数不一样,其他都是一样的,所以在计算中我们可以将一个进制数作为十进制来展开,然后把基数10换成对应的进制基数即可。
3.2 短除法
也叫做除基取余法,直到商为0则计算结束。
我们以123为例,如何将其转为二进制呢?

按照计算结果,通过余数从下往上进行列出:1111011(B)。
这种表示即 123(D) = 1111011(B),前面的123是给我们人看的,后面的1111011是给计算机看的。
3.3 减法
我们先把八进制、十六进制、二进制数码列出来对比找找规律:
八进制 | 十六进制 | 二进制 | 补0后 |
---|---|---|---|
0 | 0 | 0 | 000 / 0000 |
1 | 1 | 1 | 001 / 0001 |
2 | 2 | 10 | 010 / 0010 |
3 | 3 | 11 | 011 / 0011 |
4 | 4 | 100 | 100 / 0100 |
5 | 5 | 101 | 101 / 0101 |
6 | 6 | 110 | 110 / 0110 |
7 | 7 | 111 | 111 / 0111 |
8 | 1000 | 1000 | |
9 | 1001 | 1001 | |
A | 1010 | 1010 | |
B | 1011 | 1011 | |
C | 1100 | 1100 | |
D | 1101 | 1101 | |
E | 1110 | 1110 | |
F | 1111 | 1111 |
从上面我们看到八进制的最大数码对应3位二进制的最大数码;十六进制的最大数码对应4位二进制最大数码;不足的位数我们可以在前面补0;
20 = 1 | 23 = 8 | 26 = 64 |
21 = 2 | 24 = 16 | 27 = 128 |
22 = 4 | 25 = 32 | 28 = 512 |
上面为常用的二进制与十进制转换,记住上面可便于我们快速进行转换;
例如:我们将79转为二进制;从上表中找到最接近79且小于79的数,然后用79减去该数得到一个数,然后继续按照这个规则操作。
79 - 64 = 15 >> 减数 >> 26
15 - 8 = 7 >> 减数 >> 23
7 - 4 = 3 >> 减数 >> 22
3 - 2 = 1 >> 减数 >> 21
1 - 1 = 0 >> 减数 >> 20
根据减数使用的位权来列表
26 | 25 | 24 | 23 | 22 | 21 | 20 |
---|---|---|---|---|---|---|
有 | 无 | 无 | 有 | 有 | 有 | 有 |
1 | 0 | 0 | 1 | 1 | 1 | 1 |
所以转换后的二进制为:1111001(B) = 79(D);
我们也可以使用上面的短除法来计算后做对比;