白話計算機與編程三:二進位之美
來自專欄技術雜談1 人贊了文章
二進位之美,在於她的足夠簡單,簡潔,任何人都能夠很快的理解!
二進位是不是很奇妙啊,在計算機世界裡,只靠0和1就可以描述一切,並且描述的是那麼完美,那麼簡潔,那麼精確!但是計算機真的懂0和1嗎?我個人這個問題思考過一段比較長時間,覺得非常贊同知乎上的一個答案,如下:
計算機從來不懂0 和 1
就像鋼琴從來不懂音樂
就像蘋果從來不知道萬有引力就像人類從來就沒有真正搞明白大腦和意識
就上面這個答案,下面我來詳細闡述我的理由。
二進位其實是一種計算系統,只有兩個狀態,用0和1表示,前面說過數字只是一種抽象,凡是能夠表示兩種狀態的都可以用來表示二進位,本質是基於等價性原則。比如莫爾斯碼的點和劃,我們經常在抗戰片電報機就是基於莫爾斯碼;再比如布萊葉盲文,用凹凸來表示每個點的狀態;其次再如中國的陰陽,是非的對與錯,都可以用來表示二進位。經過一定的編碼組合,就可以二生萬物!我常說用0和1,是因為它足夠簡單,便於表達和交流!
那為什麼不用其他進位系統呢,比如人們常用的十進位系統呢?不過1946.2.14的第一台通用電子計算機
ENIAC_百度百科確實是基於人們習慣十進位的,但是計算機之父馮·諾依曼在緊接的EDVAC(1949.8)產品中,它是第一台現代通用電子計算機,採用二進位,廢棄了十進位。
個人理由闡述如下:
1.由於十進位比二進位多出8個狀態,而計算機是由硬體構成的,多出的狀態需要更多的硬體來完成;
2.二進位狀態少,意味著足夠簡單,只需要找到一種硬體能夠「穩定」的兩種狀態即可,能夠一定的條件方便切換。
3.由於計算機產生的背景直接原因是因為人類的算力不足,不能夠高速計算,而計算本來基於數學模型的,所以需要一套完備的數學理論,早在19世紀初期,英國數學家喬治·布爾創立了一個學科,叫做布爾代數,而布爾代數中有一部分是邏輯運算,基於Ture和False的數學運算理論,這裡的True和False基於等價性原則,正好可以代表0和1,所以基於二進位計算也有了完美的數學理論支持;4.由於計算機是放在一個外在環境一系列硬體整體運行的,所以可能會存在雜訊干擾,狀態越少,受干擾的概率就越小,反之,干擾越大,導致結果識別不出來。5.說了這麼多,二進位或者說布爾代數,怎麼和計算機的硬體聯繫起來呢?現在都是電子計算機,當然是基於電路的等價性,但是在計算機發明之前,這個問題與電路的等價性困擾了將近上百年,直到資訊理論之父「克洛德.埃爾伍德.香農」在1938年發表的論文《繼電器和開關電路的符號分析》才正式提出了這個等價性,由於電路的有無電壓,有無電流,燈泡的亮與滅,可以正好表示布爾代數。即二進位,或者布爾代數,可以用硬體的電路實現!
好了,基於上面五點,也就是為什麼計算機採用二進位的理由!可見,計算機不懂0和1,其實也不懂電路,只不過一直按照人的思維,基於等價性原則,加上人製作的硬體和軟體,通上電自動跑起來而已!因為人能夠通過電路表達0和1,自然也能通過電路的狀態來識別0和1,人類寫出計算的結果,從而達到計算的目的,以下圖為佐證,具體參考altair 8800:
好了,重要的東西點了,現在最後簡單說下,電路怎麼和二進位等價起來,也就是布爾邏輯運算怎麼用電路實現。布爾邏輯運算,常見的有三種,與運算,或運算,非運算,如下圖:
在數字電路中,相應的電路成為門,分別為與門,或門,非門,如下圖(本來自己畫,但看到別人直接畫了,就借鑒過來了,參考計算機為什麼能夠讀懂0和1):
基於抽象的原理,我們可以把與或非門組合成一個一個抽象的器件,就像積木塊一樣,我們可以隨機組合把玩,這樣又可以產生一些與非門,或非門,異或門,同或門等,其中異或門電路圖如下:
有了這些門之後,我們是否可以做一位的加法運算呢:
現在我們的手上又多了很多元器件,通過這些元器件,我們又可以實現很多特定功能的組件,比如8位加法器,選擇器,鎖存器(記憶組件)等。只不過上面的電路都是基於繼電器的,繼電器的主要作用是通過電路將開關自動化閉合切換,從而實現高低電平,有無電流,達到兩種狀態,隨著時代的發展,基於等價性原理,依次出現了真空管和晶體管等,後兩者的切換頻率遠高於繼電器,且壽命非常長!
好了,二進位就講到這裡吧,二進位的美在於簡潔簡單,計算機其實根本不懂0和1,只不過是按照人的思維,基於等價性原則,按照人預定的規則進行編碼和解碼而已,而0和1也不僅僅是兩個數字,更是具有抽象層次的概念,通過它能夠表達自然界的萬事萬物!
推薦閱讀:
※自製老鼠行為系統
※使用 LUKS 加密你的磁碟
※如果計算機是中國人(華夏文明)發明的
※非遺新知 中國貢獻給世界最古老計算機的前世今生
※用計算機觀察聲音的波形