目錄php
只要是談到計算機基礎,有一個東西是咱們沒法避免的,那就是編程究竟是什麼?我只放圖,其餘的大家本身YY。java
如今來想象這樣一個場景,若是奴隸來自不一樣的國家,做爲尊貴而又窮逼買不起管家的奴隸主的咱們,若是須要控制奴隸,則須要和奴隸有必定的溝通才能控制努力。python
若是把奴隸換成計算機,因爲計算機以二進制的形式存儲數據,若是咱們要奴役計算機,則須要使用二進制編寫程序。也就是說,若是咱們須要和計算機溝通,那咱們必須得會二進制代碼編程。而這個二進制代碼編程則是使用機器語言編程,直接操做硬件。它的優缺點以下:程序員
用機器語言編寫程序,編程人員要首先熟記所用計算機的所有指令代碼和代碼的涵義。手編程序時,程序員得本身處理每條指令和每一數據的存儲分配和輸入輸出,還得記住編程過程當中每步所使用的工做單元處在何種狀態。這是一件十分繁瑣的工做。編寫程序花費的時間每每是實際運行時間的幾十倍或幾百倍。並且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出錯。除了計算機生產廠家的專業人員外,絕大多數的程序員已經再也不去學習機器語言了。編程
機器語言是微處理器理解和使用的,用於控制它的操做二進制代碼。安全
儘管機器語言好像是很複雜的,然而它是有規律的。目前存在着多至100000種機器語言的指令。這也意味着不能把這些種類所有列出來。如下是一些示例:ruby
# 指令部份的示例 0000 表明 加載(LOAD) 0001 表明 存儲(STORE) ... # 暫存器部份的示例 0000 表明暫存器 A 0001 表明暫存器 B ... # 存儲器部份的示例 000000000000 表明地址爲 0 的存儲器 000000000001 表明地址爲 1 的存儲器 000000010000 表明地址爲 16 的存儲器 100000000000 表明地址爲 2^11 的存儲器 # 集成示例 0000,0000,000000010000 表明 LOAD A, 16 0000,0001,000000000001 表明 LOAD B, 1 0001,0001,000000010000 表明 STORE B, 16 0001,0001,000000000001 表明 STORE B, 1[1]
彙編語言相似於機器語言,可是彙編語言只是把一串二進制數寫成一個英文單詞。所以你不須要去記住二進制數,而是須要去記住一個一個英文單詞,這一樣是一個大工程,爲何?繼續往下看。雖然彙編語言用英文標籤代替二進制指令,本質仍是在直接操做硬件。它的優缺點以下:服務器
彙編語言的實質和機器語言是相同的,都是直接對硬件操做,只不過指令採用了英文縮寫的標識符,更容易識別和記憶。它一樣須要編程者將每一步具體的操做用命令的形式寫出來。彙編程序的每一句指令只能對應實際操做過程當中的一個很細微的動做。例如移動、自增,所以彙編源程序通常比較冗長、複雜、容易出錯,並且使用匯編語言編程須要有更多的計算機專業知識,但彙編語言的優勢也是顯而易見的,用匯編語言所能完成的操做不是通常高級語言所可以實現的,並且源程序經彙編生成的可執行文件不只比較小,並且執行速度很快。併發
彙編打印一句hello world,須要寫十多行代碼,也是醉了。如下是彙編打印hello world的代碼示例:運維
; hello.asm section .data ; 數據段聲明 msg db "Hello, world!", 0xA ; 要輸出的字符串 len equ $ - msg ; 字串長度 section .text ; 代碼段聲明 global _start ; 指定入口函數 _start: ; 在屏幕上顯示一個字符串 mov edx, len ; 參數三:字符串長度 mov ecx, msg ; 參數二:要顯示的字符串 mov ebx, 1 ; 參數一:文件描述符(stdout) mov eax, 4 ; 系統調用號(sys_write) int 0x80 ; 調用內核功能 ; 退出程序 mov ebx, 0 ; 參數一:退出代碼 mov eax, 1 ; 系統調用號(sys_exit) int 0x80 ; 調用內核功能
講完彙編,迴歸主題。做爲高貴的奴隸主的咱們,怎麼能爲了讓奴隸幫咱們作事而去學習奴隸的語言。所以咱們奴隸主們怎麼方便怎麼來,可想而知計算機語言發展也定是如此。所以產生了高級語言,這個高級指的是距離機器語言較遠。因爲高級語言的問世,高級語言直接用人能理解的語言和語法風格編寫程序,程序猿無序再去考慮複雜的硬件操做。由此能夠得出高級語言的優缺點:
在高級語言問世的同時,問題也來了,咱們用高級語言編寫的程序歸根結底仍是要給計算機執行,可是計算機只認識二進制指令。這就涉及到一個翻譯的過程,咱們須要把人用高級語言編寫的程序翻譯成計算機所能理解的二進制指令才執行,按照翻譯方式的不一樣,高級語言又分爲編譯型和解釋型兩大類。
編譯型專業解釋爲:使用專門的編譯器,針對特定的平臺,將高級語言源代碼一次性的編譯成可被該平臺硬件執行的機器碼,幷包裝成該平臺所能識別的可執行性程序的格式,而且只須要編譯一次,之後不再用編譯。其實能夠理解成谷歌/百度翻譯,咱們把要翻譯的文字所有放進去,一次翻譯,下次使用直接使用上一次翻譯好的結果。
優勢(相較於解釋型語言):執行效率高
缺點(相較於解釋型語言):開發效率低
解釋型專業解釋爲:使用專門的解釋器對源程序逐行解釋成特定平臺的機器碼並當即執行,它不須要事先編譯,直接將代碼解釋稱機器碼直接運行,也就是說只要某一平臺提供了相應的解釋器便可運行代碼。其實能夠理解成同聲傳譯,咱們須要翻譯的時候,找一個翻譯員,對方說一句翻譯員翻譯一句,下次翻譯仍是須要一個翻譯員一句一句的翻譯。
優勢(相較於編譯型語言):開發效率高
缺點(相較於編譯型語言):執行效率低
高級語言是大多數編程者的選擇。和彙編語言相比,它不但將許多相關的機器指令合成爲單條指令,而且去掉了與具體操做有關但與完成工做無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,因爲省略了不少細節,編程者也就不須要有太多的專業知識。
高級語言主要是相對於彙編語言而言,它並非特指某一種具體的語言,而是包括了不少編程語言,像最簡單的編程語言PASCAL語言也屬於高級語言。
高級語言所編制的程序不能直接被計算機識別,必須通過轉換才能被執行,按轉換方式可將它們分爲解釋型和編譯型。
編譯是指在應用源程序執行以前,就將程序源代碼「翻譯」成目標代碼(機器語言),所以其目標程序能夠脫離其語言環境獨立執行(編譯後生成的可執行文件,是cpu能夠理解的2進制的機器碼組成的),使用比較方便、效率較高。但應用程序一旦須要修改,必須先修改源代碼,再從新編譯生成新的目標文件(* .obj,也就是OBJ文件)才能執行,只有目標文件而沒有源代碼,修改很不方便。編譯後程序運行時不須要從新翻譯,直接使用編譯的結果就好了。程序執行效率高,依賴編譯器,跨平臺性差些。如C、C++、Delphi等。
執行方式相似於咱們平常生活中的「同聲翻譯」,應用程序源代碼一邊由相應語言的解釋器「翻譯」成目標代碼(機器語言),一邊執行,所以效率比較低,並且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器(想運行,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,能夠動態地調整、修改應用程序。如Python、Java、PHP、Ruby等語言。
name = input('請輸入你的姓名: ') age = input('請輸入你的年齡: ') if name == 'nick': print('nick真jb帥') if int(age) == 19: print('nick怎麼19歲了') else: print('輸入有誤,請嘗試,nick年齡19歲') else: print('輸入有誤,請嘗試,姓名爲nick') 請輸入你的姓名: nick 請輸入你的年齡: 19 nick真jb帥 nick怎麼19歲了
世界上的編程語言有600多種,但真正你們主流在使用的最多二三十種,不一樣的語言有本身的特色和擅長領域,隨着計算機的不斷髮展,新語言在不斷誕生,也同時有不少老舊的語言慢慢無人用了。有個權威的語言排名網站,能夠看到主流的編程語言是哪些。
下圖爲2019年7月數據(https://www.tiobe.com/tiobe-index/ )
C語言是一種計算機程序設計語言,它既具備高級語言的特色,又具備彙編語言的特色。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已前後被移植到大、中、小及微型機上,它能夠做爲工做系統設計語言,編寫系統應用程序,也能夠做爲應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用範圍普遍,具有很強的數據處理能力,不只僅是在軟件開發上,並且各種科研都須要用到C語言,適於編寫系統軟件,三維,二維圖形和動畫,具體應用好比單片機以及嵌入式系統開發
C++是C語言的繼承的擴展,它既能夠進行C語言的過程化程序設計,又能夠進行以抽象數據類型爲特色的基於對象的程序設計,還能夠進行以繼承和多態爲特色的面向對象的程序設計。C++擅長面向對象程序設計的同時,還能夠進行基於過程的程序設計,於是C++就適應的問題規模而論,大小由之。
C++不只擁有計算機高效運行的實用性特徵,同時還致力於提升大規模程序的編程質量與程序設計語言的問題描述能力。
Java是一種能夠撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具備卓越的通用性、高效性、平臺移植性和安全性,普遍應用於我的PC、數據中心、遊戲控制檯、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。在全球雲計算和移動互聯網的產業環境下,Java更具有了顯著優點和廣闊前景。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸取了C語言、Java和Perl的特色,利於學習,使用普遍,主要適用於Web開發領域
Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易。Go從2007年底由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發佈了Go 1穩定版本。如今Go的開發已是徹底開放的,而且擁有一個活躍的社區。GO由其擅長併發編程。
Python是一門優秀的綜合語言, Python的宗旨是簡明、優雅、強大,在人工智能、雲計算、金融分析、大數據開發、WEB開發、自動化運維、測試等方向應用普遍,已經是全球第4大最流行的語言。