一个正常的人类,拥有10根手指,每根手指代表1个信息,那么两双手掌便可表达10个信息。1, 2, 3, ..., 10。
所以人类当初用 逢10进1,也就是10进制。
什么是逢10进1?即每超过9进一位, 9, 10, 99, 100, 999, 1000, ...
那么理解二进制难吗?其实觉得难只是不习惯罢了。
通过上述解释,我们可以明白2进制就是 逢2进1。
即0, 1, 10, 11, 100
那么我们来类比一下(两边在数值上并不相等,只是比较他们的进位方式)。
0 -> 1 相当于 0 -> 1
1 -> 10 相当于 9 -> 10
11 -> 100 相当于 99 -> 100
这仔细想想不难理解吧,我相信难的是怎么能一眼看出二进制数所表示的十进制数
如果你刚刚接触2进制,给你一个二进制数让你转十进制,而且不能用纸笔。想必你应该会这么干。
如(1010)2
此时你的心中,1是1,10是2,11是3,100是4,101是5,1010是10。
过了一段时间,经过一遍遍迭代,你迭代出来了。但如果此时给你一个长一点复杂点的2进制呢?
如(1101011)2
现在给你纸笔,你肯定会用一个公式。从右往左,\(a_0\)代表最右边第一位数,\(n\)指最左边最后一位数的下标。(这里即6)
\(a_0*2^0 + a_1*2^1 + a_2*2^2 + ... + a_n*2^n\)
当老实的你写完这个式子的时候,已经过去30秒了,当然最后还是算出了答案。
那如果此时,我要求你在15秒内答出呢?那么可以用下面这个方法。
1 1 0 1 0 1 1 64 32 16 8 4 2 1
当前位如果为1时,则加上下面的数字,否则不加。
\(64 + 32 + 8 + 2 + 1 = 107\)
对这就是对上面那个公式的简化版本,相信聪明的你一定懂了。
那么这个方法和那个公式是什么原理呢,从而避免了迭代造成过多的时间开销?
(左边为2进制,右边为10进制)
首先1是1,10是2, 11是3,100是4
这实质上就是一个套娃,一环套一环。
一个10由两个01组成,即十进制的2
一个100由两个010组成,一个010由两个1组成,即十进制的4;
一个1000由两个0100组成,一个0100由两个0010组成,一个10由两个1组成,即8;
是不是感觉有点困惑?
这时可以画一个二叉树,括号里为10进制
2^3 1000(8) / \ / \ / \ / \ 2^2 0100(4) 0100(4) / \ / \ / \ / \ / \ / \ 2^1 0010(2) 0010(2) 0010(2) 0010(2) | | | | 2^0 0001 0001 0001 0001
此时将自然语言转换成了二叉树是不是对上面那个公式清晰了很多~~~
我当时觉得有点难理解的就是:(10)2为什么是(2)10?,所以可以尝试结合这个二叉树深度思考下,再一睡觉,应该差不多就领悟了。
其它进制也是同理,主要你要熟悉到底什么是进制,就是逢N进1,但具体怎么领悟就是时间与思考的问题了。
如果我还有业余时间的话会去谈谈我对“短除法”转2进制的理解。
第一次写这种内容,小学生写的,如果把你搞混了,实在抱歉:-(
当然如果有用,那就十分感谢啦~