作爲一個程序員,二進制的這些硬核知識你必須會!

電腦爲什麼都用二進制,竟然和美國有關係!

其實二進制真的是個有趣的東西,而且作爲學習編程的你,瞭解二進制的相關知識那是必備滴,相信我,看完今天這篇文章,你會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小白的話,也可以加我微信,我相信你在學習的過程中一定遇到不少問題,或許我可以幫助你,畢竟我也是過來人了!

在這裏插入圖片描述

感謝各位大大的閱讀🥰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章