Java教程

我对二进制的理解

本文主要是介绍我对二进制的理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

我对二进制的理解

10进制

一个正常的人类,拥有10根手指,每根手指代表1个信息,那么两双手掌便可表达10个信息。1, 2, 3, ..., 10。
所以人类当初用 逢10进1,也就是10进制。
什么是逢10进1?即每超过9进一位, 9, 10, 99, 100, 999, 1000, ...
那么理解二进制难吗?其实觉得难只是不习惯罢了。

2进制

进位

通过上述解释,我们可以明白2进制就是 逢2进1
即0, 1, 10, 11, 100
那么我们来类比一下(两边在数值上并不相等,只是比较他们的进位方式)。
0 -> 1 相当于 0 -> 1
1 -> 10 相当于 9 -> 10
11 -> 100 相当于 99 -> 100
这仔细想想不难理解吧,我相信难的是怎么能一眼看出二进制数所表示的十进制数

转换到10进制

如果你刚刚接触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,但具体怎么领悟就是时间与思考的问题了。

10进制转换2进制

如果我还有业余时间的话会去谈谈我对“短除法”转2进制的理解。

第一次写这种内容,小学生写的,如果把你搞混了,实在抱歉:-(
当然如果有用,那就十分感谢啦~

这篇关于我对二进制的理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!