进制的转换——新手篇
前一段时间,有一个朋友总是问我进制的问题,问不同的进制之间是如何转换的,那下面我就说一下吧。
(注:本文不讨论计算机的相关问题)
要弄懂进制怎样转换,就要先弄懂什么是进制。
进制也就是进位计数制,是人为定义的带进位的计数方法(除不带进位的计数方法以外)。 对于任何一种进制——x进制,就表示每一位置上的数运算时都是逢x进一位。比如,十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,那么以此类推,x进制就是逢x进一。(详情请见:进制)
二进制的范围是0到1,八进制的范围是0到7,十进制的范围是0到9,那么十六进制的范围是0到15吗?当然不是,10到15是两位数,不存在啊,这可怎么办呢?别急,用字母代替不就行了,所以十六进制的范围是0到9和A到F。
下表是一些常用的进制。
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
17 | 10001 | 21 | 11 |
18 | 10010 | 22 | 12 |
19 | 10011 | 23 | 13 |
20 | 10100 | 24 | 14 |
21 | 10101 | 25 | 15 |
22 | 10110 | 26 | 16 |
23 | 10111 | 27 | 17 |
24 | 11000 | 30 | 18 |
25 | 11001 | 31 | 19 |
26 | 11010 | 32 | 1A |
27 | 11011 | 33 | 1B |
28 | 11100 | 34 | 1C |
29 | 11101 | 35 | 1D |
30 | 11110 | 36 | 1E |
…… | …… | …… | …… |
看完上面这个表格,有的人可能会说,我去,这是什么玩意儿啊?彻底懵了!
不用担心,我刚学习进制的时候,当时也懵了,但是耐心琢磨几天之后就掌握的差不多了。
众所周知,十进制逢十进一,二进制逢二进一,八进制逢八进一,十六进制逢十六进一,这个应该很好理解(如果还是不理解就仔细琢磨琢磨吧,相信你)。但是,如果我们在日常生活中用上表这种方法进行进制转换的话,要是将十进制数97649转换成其他进制数,这不得累死我们啊。
这时候,有人可能会说,用计算器啊。嗯,使用计算器的确很方便,但是如果不用呢?(观众:谁这么傻啊,有计算器不用?)额……就是让你用一个方法在纸上算出来,我们可以用短除法。比如将一个十进制数38转换为二进制数,我们就用38除以2(十进制数转换为几进制数就除以几),得到商19余0;再用19除以2,得到商9余1;再用9除以2,得到商4余1……一直这样除下去,直到商为0的时候,把所有余数从下往上倒过来排列,就得到了一组数——100110,这组数就是十进制数38转换为二进制数的结果(如下图),十进制数转换成其他进制数也同样适用(除其他进制数转换成十进制数以外)。
当然,如果我们写代码是遇到这样需要进行进制转换情况,这种方法也行不通,也是很麻烦,所以这个时候就需要计算器出场了。上面的短除法只是一个普通的方法,并不适合用于“代码生涯”,一旦计算时出现一个小小的bug,那么后面的bugs就够你受的了。(观众:那你为什么还要教我们这种方法呢?!)我这只是让你掌握这样的一个技能,会总比不会好吧。
有的人会说进制很难,但有的人说进制很简单。但是不管是难还是简单,都要把它学好。尤其是进制,这是计算机学习最基础的东西。如果你要学习计算机,这就是刚刚入门就要学习的东西。要是进制转换学不好,那么计算机硬件就没办法学了。在软件学习中用得比较少,但还是会用到一些的。
最后,祝大家在自己的计算机生涯里欢快地遨游吧!
(本文仅供参考)