电脑为什么都用二进制,竟然和美国有关系!
其实二进制真的是个有趣的东西,而且作为学习编程的你,了解二进制的相关知识那是必备滴,相信我,看完今天这篇文章,你会get到很多姿势,最后读完觉得不错的,请无情的转发吧!
不过,这个和美国有啥关系,别着急,我真的是带你涨知识的!
知道了二进制这个知识点,我飘了
我之前曾在知乎上看到这样的一个话题,大意就是说你从什么时候觉得自己的编程能力开始突飞猛进了,说实话,我现在还没有这样的感觉,也许是我太菜了。
但是,重点是但是,当我知道了二进制的这个知识点,我觉得我懂底层了,啊哈哈!
那是什么嘞?就是这个知识点:
对于计算机而言,所有的数据最终都是被转换成二进制进行存储的!
咋样,你知道这么回事吗?也就是说啊,对于计算机而言,我才不管你是什么图片,还是什么数字等等,在我眼里清一色都是0和1组成的一串串的数字,这些就是二进制数据。
我们平常写程序,敲代码,各种数据一大堆,当程序真的运行起来的时候,其实计算机的内部处理的都是二进制数据,我们写的那些个玩意,经过编译啥的,最终都被搞成了二进制数据。
这是啥,这就是底层运作机制啊,你说我懂得了这些,是不是可牛气,那还不得飘了!
二进制是个啥玩意
那二进制是什么东西啊,这个学习编程的多多少少得了解点吧,最起码知道十进制吧,上过学的都知道,我们最常用的,竟然有人问,为啥我们经常使用的是十进制,你猜我咋回答的,我让他数数自己有几个手指头和脚指头,所以说嘛,十进制对我们来说非常自然,而且超级方便,否则用个十六进制什么的,我估计小学课堂上都是掰脚趾的。
二进制是用来表示数的一种方式,我们十进制使用0-9这十个数字来表示,然后是逢十进一,那二进制的话就是使用0和1这两个数字来表示数,然后是逢二进一。
除了十进制和二进制,常见的还有八进制和十六进制,就是同一个数可以用不同的进制来表示,一般以我们熟知和使用的十进制来作为基准,比如十进制的5用二进制咋表示,用二进制的话就是:101,你看是不是都是0和1。
一般二进制都是几位嘞
这里还有个知识点,我们上面说了,二进制就是使用0和1这两个数来表示各个数的,像上面的十进制的5,用二进制表示的话就是101,但是更为准确的一点,我们可能会把它写成二进制的标准形式,就是00000101,你数一数0和1一共有多少个。
如果你数学学得足够好的话,应该看得出来是8位,为啥是8位,为啥前面都是0,来来,我们一个个的说。
首先啊,考考你的基础,你知道字节和位的关系吗?一字节等于多少位呢?一般啊,一个字节叫做1byte,一位叫1bit,然后一个字节等于八位,这个位是啥,二进制不都是0和1组成的嘛,然后每一个0或者1都叫做1位,那为啥要表示成八位好点嘞?
上面说了,一个字节是八位,那你知道计算机处理信息的最基本的计量单位是啥吗?对的,就是字节,字节是基本单位,位则是最小的单位,所以啊,一般用一个字节八位来表示,因此十进制的5通常用二进制00000101来表示,这样更规范,那只鱼为啥前面都是0,那是因为二进制有规定,高位用0补充,也就是说啊,101前面需要补充几位数字,一般凑成八位,前面的都叫做高位,高位用0补充。
当然,二进制的表示,一般来说可以使八位,十六位,三十二位,也就是八的倍数,为啥是八的倍数,上面同理,所以啊,具体怎样表示,视情况而定,举个例子吧,比如你写个101,可能有人认为是十进制的一百零一,但是你写成00000101,别人一看就是二进制了,咋样,有内味了吧!
这里如果你想了解的更多,那你就要去了解下进制的转换了,也就是各个进制转过来转过去,反正是挺烦的,如果你是个闲人,那看看这篇文章吧:
进制转换?原码补码和反码?盘它
二进制为啥是0和1啊
二进制用0和1来表示,有啥意义吗?不就表示两个数嘛,我喜欢6和8,咋不用这俩数嘞,这个吧,按理说是可以的,但是0和1这是个经验结晶,0和1你不觉得很纯粹,更加简约吗?
其实吧,这个0和1就是个抽象出来的玩意,说白了,0和1的本质就是两种状态,这也是长久发展而来的,我们平常都知道什么正与反,好与坏,阴阳八卦什么的,其实就是个对立面,拿到计算机这面来说,那就牵涉到电啊,元件啊什么的,怎么搞嘞,计算机毕竟要有电才能工作,那简单点,有电和没电,说的高大上点,断电和通电,这不就是一个对立面嘛,那好就用通电和断电这两种状态来表示数据吧,通过不同的通电和断电的各种组合来表示不同的数据,不过你表示一个数据,总不能写成这样吧:“通电通电通电断电断电”,这什么玩意儿,还是得想想怎么表示比较优雅。
我们先来看看计算机的内部构造是怎么回事吧,我们都用过计算机,但是你知道计算机的内部构造吗?你说,知道,不就是主板,内存,磁盘这些玩意吗?说的没错,再往小小的说,其实说白了,计算机的内部构造就是各种的IC组成,不用说,你不知道啥是IC,哈哈,IC就是集成电路的意思,它长这个样子:
这就是一个IC,注意看它的长相,有点像蜈蚣,很多触角,它这个叫做引脚,因为是组成计算机的玩意,所以它是需要通电的,那么对于一个引脚来说,就是只有两种状态了,你想啊,对于这个引脚来说,要么通电要么不通电,你看,这是不是就是两种状态,说起来也是对立面,就是通电和断电。
这个引脚通电后是有电压的,一般来说嘞,就是5V,也就是通电是5V,断电就是0V了。
不过这里据我看的一些其他资料发现这不是绝对的,也就是说通电的状态不一定非得是5V那么准确,因为最终是要依靠这两种状态来表示二进制数据的,内存中的IC有过详细的介绍,大家可以看看我的这篇文章:
学完内存的这些硬核知识,你保准飘起来
这篇文章介绍的还是比较详细的,强烈推荐看一看。
但是这篇文章依然没有提到这点,就是不通电表示0v 通电表示5v 这其实也是不准确的 通电和不通电表示的是状态 更加准确的描述是0-2.5v 表示不通电这个状态,也就是断电,而通电状态是2.5-5v ,这样容错率更高 。了解即可。
到了这里你其实就要明白,计算机对于二进制数据的处理就是用一种对立面的两种状态来表示,那在计算机里面如何去优雅的表示这两种状态嘞,想来想去,还是0和1比较合适,这就像是经验值一样,一直传承下去,然后还有逻辑运算中的真假什么滴,用0和1都比较合适。
为啥电脑都是用二进制嘞
那我们接下来再来看看,计算机中对信息处理为要用二进制嘞,十进制什么的不可以吗?再说这之前,你还得了解下计算机的运算机制,主要就是CPU这块的知识,别担心,我已经写过这方面的文章了,你看看:CPU的这些知识点,太有用了
了解了CPU的一些运算机制,你就会明白,用二进制运算,是真的简单啊,不过要是这样简单的说说,你好像还是不知道,为啥计算机处理信息要用二进制啊,我来稍微详细的给你说说。
1、 硬件上容易实现
上面让你看了计算机中的IC了,你看那些引脚,是不是刚好两种状态,与二进制的理念不谋而合,二进制也就0和1两种状态,这是在硬件上的实现,也即是状态越少越好实现,二进制就两种状态无疑实现起来比那些多状态的更加容易。
2、 运算起来更加高效
你想啊,就让你计算0-1之内的加减乘除容易还是1-100之内的加减乘除容易啊,这个显而易见啊,对于计算机的计算也是这样啊,肯定状态表示越少越容易计算,也就越高效啊。
大致先了解这两条吧,多了你也记不住,然后接下来就给你说点野史,增加你的见识和姿势!
你知不知道还是三进制
我们平常说进制啥的,大多数都是在说什么二进制,十进制,保不齐还有八进制和十六进制,但是你在听过三进制吗?应该很少人知道这个吧,其实三进制在某些方面比二进制还要强!
经过上面的讲解,我们知道,对于二进制来说,就是俩状态,表示出来就是0和1,再说的底层一点,那就是计算机内部高低电平,也就是IC引脚那块,有通电和断电两种状态,这个也叫做高低电平,但是三进制有点不一样,对于三进制来说,从名字上就可以猜出,它是有三种状态的,表示出来就是0,1和-1,是的,人家多了个-1,用电表示的话就是正负电压和0。
其实你如果试着学习二进制的转换这块你就会发现,二进制对负数的表示不太友好,需要用到补码和反码的知识,这块的设计也非常的巧妙,但是学习起来也非常的烧脑,不过对于三进制来说,由于引入-1这一状态,就可以很好的表示负数,所以就这点来说,三进制会比二进制少了很多复杂的运算!
那你会说,为啥现在不用三进制嘞?讲点历史吧!
为啥不用三进制嘞
简单聊聊吧,注意啦,涨姿势啦,三进制这个东东,最早是苏联搞的,当时还搞这个的还有美国,不过后来美国那边因为某种原因,关于三进制的研究停止了,那么当时比较牛气的就是苏联对三进制的研究,成果已经到了搞出了样机的地步,网上找了图片:
美国这边对三进制就没啥弄的了,于是美国就搞二进制了,好像是这么回事,哈哈,所以啊,那个时候,美国主要是二进制,苏联嘞就是三进制,不过啊,最后因为啥啥战,苏联没落了,作为其归属的三进制也跟着玩完了,而美国嘞,越来越进步,随着二进制也奠定了霸主地位,然后科技的不断发展,依据二进制搞了一系列的东西!
而三进制,注定昙花一现啊!
总结
这篇文章写得有点费劲,其实写计算机基础方面的东西不太容易,因为很多东西没你想象的那么简单,属于那种不能轻易深挖,越挖越有料的那种,而且理解起来还有点烧脑,关键是看了可能你还记不住,所以啊,我尽量通俗易懂的去讲,让你看完印象深刻一点。
我深知计算机基础对程序员的重要性,所以,即使写起来很难,我也愿意持续创作下去,与大家一起修炼编程内功,没别的,就想着大家一起牛逼!
感谢阅读
大学的时候选择了自学Java,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习Java核心知识,深入的研习计算机基础知识,所有心得全部书写成文,整理成有目录的PDF,持续原创,PDF在公众号持续更新,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?
非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不傻,钱很多,活得久的快乐的程序员吧!
回复关键字“PDF”,获取技术文章合集,已整理好,带有目录,欢迎一起交流技术!
另外回复“庆哥”,看庆哥给你准备的惊喜大礼包,只给首次关注的你哦!
任何问题,可以加庆哥微信:H653836923,另外,我有个交流群,我会***不定期在群里分享学习资源,不定时福利***,感兴趣的可以说下我邀请你!
对了,如果你是个Java小白的话,也可以加我微信,我相信你在学习的过程中一定遇到不少问题,或许我可以帮助你,毕竟我也是过来人了!
感谢各位大大的阅读