CPU 是如何理解 01 二進(jìn)制的?
準(zhǔn)確的來說,CPU不認(rèn)識也不理解任何東西。
CPU就像一個單細(xì)胞一樣,本身不具備任何思考能力,沒什么自己的想法,你給它一個刺激,它只是簡單的會有一個反應(yīng)。
那這個刺激是什么呢?是電壓,硬件感知到的僅僅就是電壓。
電壓有兩種,高電壓和低電壓。
你馬上就能反應(yīng)過來,這就是01二進(jìn)制,高電壓代表1低電壓代表0,0和1僅僅是人類可以理解的東西,硬件電路可不理解這玩意,它僅僅就是靠電流驅(qū)動來工作。
讓我們來看看這個簡單的電路,這個就是與門:
你能說這個電路理解它自己該做什么嗎?它有自我意識嗎?當(dāng)然沒有。
所以說這個問題的答案非常簡單:
CPU根本就不能理解任何東西,之所以CPU能正常工作,僅僅是因為你(制作CPU的人)讓它這么工作。
這個問題就好比你問一輛自行車是如何理解自己怎么跑起來的?還不是因為你設(shè)計了車輪、車鏈然后用腳一蹬跑起來的。
你希望兩個開關(guān)都打開燈才亮,因此你這樣設(shè)計電路,這就是與門;你希望任意一個開關(guān)打開燈就亮,因此你那樣設(shè)計電路,這就是或門;你希望關(guān)閉開關(guān)燈才亮,這就是非門,有了與或非你可以搭建出任意復(fù)雜的邏輯電路,比如下面這個能執(zhí)行加操作的加法器。
看看這個電路,你能說它知道自己是在執(zhí)行加法操作嗎,這當(dāng)然是人類認(rèn)為這個電路的輸出等價于加法操作的結(jié)果。
盡管這個電路看上去很不錯,給定兩個輸入得到的輸出和我們?nèi)祟愓J(rèn)為的加法是一樣一樣的,但這有點簡單。
除了加法是不是還應(yīng)該有其它操作,如果有多種類型的操作那么就必須告訴電路該操作的類型是什么(操作碼),操作的數(shù)字是什么(操作數(shù))。
這樣給它一個輸入就能按照我們的想法來控制電路了,BOOM!??!宇宙大爆炸!
哦不對,CPU誕生了!
人類編寫的代碼必須首先轉(zhuǎn)為01二進(jìn)制,之后才能驅(qū)動CPU工作。
當(dāng)然,怎么把一坨代碼高效等價的轉(zhuǎn)為1001011100。。。這項工作可不簡單,人類探索了幾十年,一干人等還獲得了圖靈獎,可見這個問題的重要程度以及難度。
你今天能簡單點一下build按鈕或簡單運行一個命令就能把你寫的代碼轉(zhuǎn)為01串,要知道這簡單的背后是靠無數(shù)天才榨干天量的腦細(xì)胞才實現(xiàn)的。
從這里應(yīng)該應(yīng)該能看出來,CPU根本不認(rèn)識任何語言,理解編程語言的其實是編譯器。
現(xiàn)在我們能給CPU輸入了,那輸出呢?
剩下的僅僅就是解釋了,比如給你一個01串,01001101,你可以認(rèn)為這是一個數(shù)字,也可以認(rèn)為這是一個字符,也可以是表示RGB顏色,一切都看你怎么解釋,這就是軟件的工作了。
最終的目的只有一個:讓人類能看懂。
整個流程就是這樣的:
計算機真是一個非常神奇的機器,如此簡單,卻又能完成復(fù)雜無比的工作。
現(xiàn)在你應(yīng)該明白了吧,計算機所謂能理解二進(jìn)制就好比你的臺燈能理解開關(guān)一樣。
它們真的對此一無所知。





















 
 
 









 
 
 
 