實(shí)際情況并不是這樣的,。 我們來(lái)一條條的看吧: 1.編程語(yǔ)言并不是都要編譯成C,這個(gè)說(shuō)法不知道是誰(shuí)提出來(lái)的,。C語(yǔ)言和java,,python一樣,也是一種高級(jí)語(yǔ)言,。但是C語(yǔ)言有個(gè)優(yōu)勢(shì),,就是可以嵌套匯編,實(shí)現(xiàn)底層交互,。 2.很多人存在一個(gè)誤區(qū),,匯編語(yǔ)言就是最底層的語(yǔ)言了,其實(shí)計(jì)算機(jī)還是不認(rèn)識(shí)匯編是個(gè)什么東西,, 因?yàn)橛?jì)算機(jī)只能識(shí)別一種語(yǔ)言,,那就是機(jī)器語(yǔ)言,全都是0和1這樣的二進(jìn)制數(shù),。比方說(shuō)MOV AX,BX,,這條匯編的意思是寄存器將BX的內(nèi)容轉(zhuǎn)移到AX中,對(duì)應(yīng)機(jī)器語(yǔ)言的1000100111011000,,非常復(fù)雜,。可以這么理解:匯編語(yǔ)言實(shí)際上是機(jī)器指令的一種簡(jiǎn)寫形勢(shì),。 可以看看下圖,,做一個(gè)簡(jiǎn)單的加法運(yùn)算,分別用C語(yǔ)言,,匯編和機(jī)器語(yǔ)言表示,,各位就能理解高級(jí)語(yǔ)言的好處了。 無(wú)論是C還是其他什么語(yǔ)言,,最終的目的都是實(shí)現(xiàn)某種功能,,而這離不開硬件的支持,所以歸根結(jié)底,還是要從程序和硬件的關(guān)系說(shuō)起,。 硬件,,程序和編譯器之間的關(guān)系在計(jì)算機(jī)中存在著大量的電子元件,電路就兩種情況:開和關(guān),,這兩種狀態(tài)分別用1和0來(lái)表示,,也就是眾所周知的二進(jìn)制, 在計(jì)算機(jī)中,,所有的運(yùn)算都是以二進(jìn)制的形式進(jìn)行的,,比方說(shuō)3+4,在CPU中的表現(xiàn)形式為00110000+01000000,,如果是負(fù)數(shù)運(yùn)算或浮點(diǎn)運(yùn)算的話還會(huì)更復(fù)雜一些,,這里不再累述。 通過(guò)0和1決定電路狀態(tài),,那么操作者是通過(guò)編程語(yǔ)言操作硬件的呢,?這里編譯器的作用就體現(xiàn)出來(lái)了。 編譯器就像是一個(gè)翻譯一樣,,也就任人們口中俗稱的編程軟件,。其實(shí)用更專業(yè)的話來(lái)說(shuō),,編譯器實(shí)際上是IDE(開發(fā)集成環(huán)境)中的一個(gè)工具,。 雖然大家可能在操作中感受不是那么強(qiáng)烈,但如果你在windows控制臺(tái)下用javac編譯過(guò)java代碼,,或者你在linux的命令行下編譯過(guò)程序,,這個(gè)時(shí)候我們就直接使用了編譯器。 最后提一點(diǎn),,并不是所有的語(yǔ)言都會(huì)被編譯器直接編譯成機(jī)器語(yǔ)言,。C語(yǔ)言是一個(gè)比較特殊的語(yǔ)言,因?yàn)樗侵苯涌梢灾苯泳幾g為匯編再編譯為機(jī)器碼的,,這也是C語(yǔ)言可以和底層打交道的主要原因,。像我們熟知的java,它會(huì)把源碼先轉(zhuǎn)換成一種叫做字節(jié)碼的東西,,通過(guò)JVM虛擬機(jī)將其轉(zhuǎn)換為機(jī)器碼,。所以說(shuō),編譯器的類型有很多,,作用不能一概而論,。 |
|
來(lái)自: 求學(xué)修身2011 > 《電腦知識(shí)》