天天看點

【C語言】01-概述

一、計算機常識

在學習C語言之前,先要了解一些計算機常識

1.計算機隻能識别0和1

  • 大家都知道,計算機要通電才能工作,說白了,它跟電視、洗衣機一樣,都是電器。電器都有個共同的能力:懂得判斷通電還是斷電,通電就能工作,斷電就停止工作。是以,從根本上講,計算機隻能識别電信号:高電平信号(通電)、低電平信号(斷電),它隻知道某個開關是通電還是斷電。我們用1代表高電平,0代表低電平。
  • 也就說,計算機隻能識别0和1。

2.二進制

因為計算機隻能識别0和1,是以計算機所能識别的指令和資料都是用二進制數(0和1)來表示的。所謂二進制,就是用0和1來表示所有的數。不過我們日常生活中最常用的是十進制,用0~9來表示所有的數

1> 二進制指令

給計算機灌輸一些指令,它就能執行相應的操作,而計算機隻能識别由0和1組成的指令。在計算機發展初期,計算機的指令長度為16,即以16個二進制數(0或1)組成一條指令,例如,用1011011000000000這條指令,是讓計算機進行一次加法運算。是以,如果要想計算機執行一系列的操作,就必須編寫許多條由0和1組成的指令,可以想象的到,這個工作量是如此巨大。

2> 二進制資料

平時我們在計算機中存儲的一些資料,比如文檔、照片、視訊等,都是以0和1的形式存儲的。隻不過計算機解析了這一大堆的0和1,以圖形界面的形式将資料展示在我們眼前。

二、程式設計語言發展史

我們可以利用程式設計語言來編寫程式,再将編好的程式運作到計算機上,計算機就能夠按照程式中所說的去做。從計算機誕生至今,程式設計語言大緻經曆了3個發展階段:機器語言、彙編語言、進階語言。其中,C語言屬于進階語言。

1.機器語言

1> 什麼是機器語言

在電腦誕生初期, 所有的計算機程式都是直接用計算機能識别的二進制指令來編寫的,也就是說所有的代碼裡面隻有0和1。這種程式設計語言就是“機器語言”。這些由0和1組成的二進制指令,又叫做“機器指令”

2> 優點

  • 由于機器語言編寫出來的代碼是能被計算機直接識别的,是以機器語言是直接對硬體産生作用的,程式的執行效率非常高。
  • 機器語言能直接通路、控制計算機的各種硬體裝置,如磁盤、存儲器、CPU、I/O端口等。

3> 缺點

  • 用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令和指令的涵義,指令又多又難記。
  • 編出的程式全是些0和1的指令代碼,可讀性差,還容易出錯。
  • 由于機器語言是直接對硬體産生作用的,對硬體的依賴性很強,是以不同型号計算機的機器語言又不一樣。也就是說,如果2台不同型号的機器想實作一樣的功能,需要編寫2套完全不同的代碼。

可以看出,機器語言很難掌握和推廣,現在除了計算機生産廠家的專業人員外,絕大多數的程式員已經不再去學習機器語言了。

2.彙編語言

1> 什麼是彙編語言

  • 由于機器語言的種種弊端,嚴重影響開發效率,後面就出現了彙編語言。彙編語言其實就是符号化的機器語言,它用一個符号(英文單詞、數字)來代表一條機器指令。比如,在機器語言中,用1011011000000000這條指令,是讓計算機進行一次加法運算;而在彙編語言中,用英文單詞“ADD”就可以表示加法運算。一個有意義的英文單詞,很明顯比一串又臭又長的二進制指令,直覺好記多了。
  • 由于計算機隻能識别0和1,用彙編語言編寫的代碼是不能被計算機所識别的,像剛才的“ADD”,計算機肯定不知道是什麼意思。是以,用彙編語言編寫的代碼需要翻譯成二進制指令後,才能被計算機識别。這個翻譯的工作交給“編譯器”去做。

2> 優點

  • 對比機器語言,彙編語言的代碼可讀性好
  • 彙編語言能像機器語言一樣,可以直接通路、控制計算機的各種硬體裝置,如磁盤、存儲器、CPU、I/O端口等。使用彙編語言,可以通路所有能夠被通路的軟、硬體資源。
  • 目标代碼簡短(目标代碼就是經編譯器翻譯過後的二進制代碼),占用記憶體少,執行速度快。(計算機中所有程式的運作都是在記憶體中進行的,是以記憶體的性能對計算機的影響非常大。其作用是用于暫時存放CPU中的運算資料,以及與硬碟等外部存儲器交換的資料。隻要計算機在運作中,CPU就會把需要運算的資料調到記憶體中進行運算,當運算完成後CPU再将結果傳送出來,記憶體的運作也決定了計算機的穩定運作。)計算機的記憶體是有限的,是以一個應用程式運作時所占用的記憶體越少越好。

3> 缺點

  • 彙編語言是面向機器的,通常是為特定的計算機或系列計算機專門設計的。是以,不同的機器有不同的彙編語言文法和編譯器,代碼缺乏可移植性,也就是說,一個程式隻能在一種機器上運作,換到其他機器上就不能運作。
  • 彙編語言的符号非常多、難記,即使是完成簡單的功能也需要大量的彙編語言代碼,很容易産生BUG,難于調試
  • 使用彙編語言必須對硬體非常了解,開發效率很低,周期長且單調

3.進階語言

由于彙編語言依賴于硬體,代碼可移植性差,符号又多又難記,于是人類就發明了非常接近自然語言的進階語言。後面要學習的C語言就是進階語言。

1> 優點

  • 簡單、易用、易于了解,文法和結構類似于普通英文,且遠離對硬體的直接操作,使得一般人經過學習之後都可以程式設計,而不用太熟悉硬體知識
  • 寫出來的程式更加簡潔。比如要計算2個數的和,在進階語言中可以寫得非常簡潔:d=a+b;。但是在機器語言和彙編語言中,就需要幾條甚至幾十條指令,而且不同機器還要編寫不同的指令代碼
  • 用進階語言編寫的同一個程式還可以在不同的機器上運作,具有可移植性

2> 注意

用進階語言編寫的程式不能直接被計算機識别,需要經編譯器翻譯成二進制指令後,才能運作到計算機上

三、C語言簡史

  • C語言于1972年發明,首次使用是用于重寫UINX作業系統(UNIX以前主要是用彙編語言寫的,它奠定了作業系統的基礎)
  • 随着UNIX作業系統的成功,C語言也得到了大幅度地推廣,被先後使用到大、中、小、微型主機上,至今還是世界上最流行、使用最廣泛的進階程式設計語言之一
  • C語言是一門面向過程的語言,非面向對象的語言。(究竟什麼是面向過程、面向對象,暫時不用去了解,隻需要知道C語言是面向過程就Ok了)

下面是2013年3月份的程式設計語言熱門排行榜

【C語言】01-概述

從C語言誕生至今,它的熱度一點也沒減過,前兩名基本上都是Java和C

四、C語言的特點

1.豐富的運算符

計算機的基本功能就是計算,是以一門程式設計語言的計算能力是非常重要的。C語言提供了34種運算符,計算類型極其豐富,其中包括了最基本的加減乘除運算。

2.豐富的資料類型

  • C語言的生命力之是以如何強大,很大一部分是因為它擁有豐富的資料類型。
  • 正因為C語言資料類型豐富,運算能力極強,是以很多資料庫都是用C語言編寫的,比如DB2、Oracle等。

3.可以直接操作硬體 

跟彙編語言一樣,C語言可以直接操作硬體,允許直接對位、位元組、位址進行操作(位、位元組、位址是計算機最基本的工作單元),可以說幾乎沒有C語言做不了的事情。

4.高效率的目标代碼

目标代碼,就是經編譯器翻譯後的二進制代碼。C語言的目标代碼執行效率非常高。

5.可移植性好

在一個環境上用C語言編寫的程式,不改動或稍加改動,就可移植到另一個完全不同的環境中運作。

上面所說的都是C語言的優點,它有個非常明顯的缺點:文法限制不嚴格。這樣就導緻初學者對C語言文法不能了解得很透徹,而且在開發過程中也會帶來很多容易忽略的問題。 

五、C語言的作用

  • 由于C語言具有強大的資料處理能力,而且允許直接通路記憶體位址,直接對硬體操作,是以它适于編寫系統軟體、圖形處理、單片機程式、嵌入式系統開發甚至是用于科研。
  • 很有遊戲外挂都是用C語言寫的
  • 很多作業系統的底層都是用C語言寫的,比如android 

六、C語言的版本問題

從UNIX作業系統的成功後,C語言得到了廣泛地應用,從大型主機到小型微機,都有C語言活躍的身影,也衍生了很多個版本的C語言。長期以往,C語言将可能成為一門有多個變種、松散的語言。一門正式的語言,肯定要有個标準才行,不然就亂套了。為了改變這種局面,1983年美國國家标準局(American National Standards Institute,簡稱ANSI)成立了一個委員會,開始制定C語言标準的工作。1989年C語言标準被準許,這個版本的C語言标準通常被稱為ANSI C

繼續閱讀