細說10月24號為什么是程序員的節日?


10月24日,有人把這個日子定為程序員的節日,因為1024這個數字和程序員密切相關。

 

下面我就為大家解密,1024跟程序員有什么關系,程序員寫程序又到底是怎么回事?

 

我們所使用的電腦和手機裝着各種各樣的軟件,能幫我們完成各種各樣的任務,幫我們工作,供我們娛樂,這部神奇的機器似乎無所不能。

 

但是你關掉顯示器,拆開機箱, 會發現里面只有密密麻麻的電路, 這些電路以一種神奇的方式運轉, 幫我們完成我們想要做的事情。

 

就拿機箱中最主要的部件CPU來說,他其實是由無數個邏輯開關組成,每個開關只能表示兩種值0和1,開關閉上就是1,開關打開就是0,就像手電筒一樣,開關閉合,點亮燈泡表示1,開關放開, 熄滅燈泡表示0。這無數多個邏輯開關通過一種叫做繼電器的電子元件連接,經過各種奇妙的組合,最終就是我們所使用的CPU。雖然我們使用的現代集成電路型CPU比這個要先進無數倍,基礎運行原理卻沒有本質的變化, 它們依然只能識別0和1這兩個數字。

 

比如說你要讓電腦的機箱報警1次,你跟CPU說:“你讓電腦給我叫一下”,CPU是不會理你的。 CPU只認得由0和1組成的命令,你需要給CPU發送一條表示讓機箱報警的命令,比如說11100101,它才會按照你的要求去完成任務。如果你要讓機箱叫10下,那么同樣的命令要發十次。

 

這些0和1組成的命令就是計算機程序的本質,任何軟件最終都是以這種形態在計算機上運行的,我們把它稱之為機器語言或者機器指令。 

 

這種由0和1組成的命令對機器而言甚易理解,對人類而言卻難以識別。這樣的命令, 讀個幾條幾十條還勉強能接受,幾萬條, 幾十萬條,幾百萬條呢?試想一下對着滿屏幕的密密麻麻的0和1,會是什么感受?  任何一個智商落在天才智商界限以下的普通人,都沒有辦法高效的閱讀這些指令。

 

為了克服這種障礙,有人發明出一種叫做匯編語言的東西,匯編語言是機器語言的人類可閱讀形式。

 

比如說讓機箱報警的指令11100101,如果使用匯編語言實現的話就是warn指令。匯編器最終會把warn指令轉換成11100101,因為CPU只認得0和1,不認得英文字母,但是對於人而言,warn指令比11100101要友好的多。換句話說, 匯編語言的編譯器會把人類看的懂,CPU看不懂的匯編語言命令代碼轉換成CPU看的懂,人類卻很難看的懂的機器指令。就像你的身體, 需要蛋白質、脂肪、維生素等營養元素來維持身體的新城代謝,可你吃下去的食物是蔬菜、水果、肉類,你的嘴巴認識這些食物,你的身體卻不認識。這個時候, 你的消化系統就充當起了轉換器, 將食物轉換為你身體所需的營養元素。  這其實和電腦運行是同樣的道理, 你的身體好比電腦, 他需要營養元素也就是0和1組成的指令來維持運行,你吃下去的食物是匯編指令,你的消化系統就是將食物轉化成營養元素也就是將匯編語言轉換成機器語言的轉換器。

 

讀到這里,是不是感覺到了眉目,程序員的工作就是寫匯編指令。事實上,  的確存在以寫匯編代碼為職業的程序員。 然而, 計算機技術發展日新月異, 現在,這類程序員只占到程序員總群體的極少一部分。 絕大多數程序員不用匯編語言寫程序,他們使用的是比匯編語言更加高級更加易於使用的高級編程語言。

 來看一個例子

 

 

這是一個供普通電腦用戶使用的計算器軟件,我們用它計算8加9的值,並將結果17顯示。

 

假設我們不考慮軟件的圖形用戶界面實現,只關注值的計算,此次運算的程序大概長這樣子,代碼以C語言為例

 

#include<stdio.h>  
int main(){ int i =8,j = 9; printf("%d",i+j); }

 

這便是大多數程序員使用的語言,也就是所謂的高級語言。

 

那我們可不可以使用匯編語言來實現這個程序呢,答案是可以的,下面是匯編語言的實現形式

 

 

使用高級語言和使用匯編語言實現這次計算,哪一種編碼效率高,哪一種簡單,哪一種可讀性強,哪一種易於維護?不言而喻

 

因為高級語言比匯編語言好用,所以程序員們都放棄匯編語言轉而使用高級語言。

 

可是我們電腦中的CPU是不認識高級語言的。這個時候高級語言編譯器閃亮登場,它的作用就是將高級語言的代碼轉換成匯編語言的代碼,就跟匯編語言轉換器將匯編代碼轉換成機器代碼是一樣的道理。

 

這個時候,一切都已明朗, 軟件的整個運行過程如下

 

我們假定某個軟件是使用解釋型語言開發的,那么, 當軟件的使用者執行軟件的某一個功能時

 

第一步,這個功能會被轉換為開發這個軟件的語言的代碼

 

第二步,這門語言的代碼會被語言的解釋器轉換成匯編代碼

 

第三步,匯編語言轉換器會把匯編代碼轉換成機器代碼

 

第四步,CPU執行機器代碼,完成用戶的操作

 

那上面講的這些跟1024有什么關系呢?我們已經知道, 計算機CPU只認識0和1組成的指令,這種指令還有另外一個名稱, 叫做二進制,而我們人類使用的數字系統是十進制。

 

零,一,二,三,四,五,六,七,八,九,十,我們是這樣數數的,從零到九, 每一個數字都由一個字符表示,分別是0-9,而十並沒有單獨的字符表示,它使用一和零的組合“1”,“0”表示,所以,在十進制數字系統中,所有數值都是0-9的組合。

 

同樣,在八進制數字系統中,只能用0-7范圍內的數字進行表示。  零,一,二,三,四,五,六,七,接下來不是八, 像十進制的十一樣, 八進制的八也用“1”和“0”的組合表示。

 

同樣,二進制只能使用0-1范圍內的數字來表示。零,一,不好意思,二進制沒有二,如同八進制沒有八一樣,二進制的二也是用“1”和“0”的組合來表示,10在二進制系統中就表示2。

 

一,二,三,四,五,六...一千零二十四,我們從一數到一千零二十四,在十進制數字系統中,使用1024表示;在八進制數字系統中使用2000表示;在二進制數字系統中則使用10000000000表示,這像不像一串CPU的機器指令? 是的,CPU認得出這串數字。 如果使用科學計數法表示那么這串數字就是2的10次方。

 

1024 = 2的10次方 = 10000000000

512 = 2的9次方 = 1000000000

256 = 2的8次方 = 100000000

128 = 2的7次方 = 10000000

64 = 2的6次方 = 1000000

32 = 2的5次方 = 100000

16 = 2的4次方 = 10000

8 = 2的3次方 = 1000

4 = 2的2次方 = 100

2 = 2的1次方 = 10

1 = 2的0次方 = 1

 

看出來程序員和1024的關系了嗎?我告訴你們,沒什么關系,這一切只是 1024 = 2的10次方 = 10000000000 的偶然而已, 512、256、128這些數字對與程序員而言跟1024沒有差別。

 

有同學說1KB = 1024Byte, 1MB = 1024KB, 1GB = 1024MB, 1TB = 1024GB, 1PB = 1024TB,這才是1024的意義!但是這些容量單位不僅僅跟程序員有關系吧?普通的電腦和手機用戶甚至比程序員更關注這些單位

 

如果從這個角度講,那么10月24日不但是程序員的節日,更是所有電腦用戶的節日,我們所有電子設備愛好者應該普天同慶,大家一起嗨!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM