1. 程式人生 > >如何從門外漢到大概理解嵌入式(c語言)基礎知識

如何從門外漢到大概理解嵌入式(c語言)基礎知識

1.什麼是計算機程式?什麼是程式語言?為什麼需要程式語言?程式語言是用來幹嘛的?舉例一些程式語言,以及他們各自的特點?
答:計算機程式(英語:Computer program),也稱為軟體(英語:software),簡稱程式(英語:Program)是指一組指示計算機或其他具有資訊處理能力裝置每一步動作的指令,通常用某種程式設計語言編寫,運行於某種目標體系結構上。
人和電腦硬體也要有語言來交流那就是計算機程式語言。
程式語言(programming language),是用來定義計算機程式的形式語言。
程式語言是被設計成專門使用在計算機上的,但它們也可以用來定義演算法或者資料結構。
C語言
C語言是一種計算機程式設計語言,它既具有高階語言的特點,又具有組合語言的特點。C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程式,也可以作為應用程式設計語言,編寫不依賴計算機硬體的應用程式。它的應用範圍廣泛,具備很強的資料處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如微控制器以及嵌入式系統開發。
C++
C++這個詞在中國大陸的程式設計師圈子中通常被讀做“C加加”,而西方的程式設計師通常讀做“C plus plus”,“CPP”。 它是一種使用非常廣泛的計算機程式語言。C++是一種靜態資料型別檢查的、支援多重程式設計正規化的通用程式設計語言。它支援過程化程式設計、資料抽象、面向物件程式設計、泛型程式設計等多種程式設計風格。
JAVA
Java是一種可以撰寫跨平臺應用軟體的面向物件的程式設計語言,是由Sun Microsystems公司於1995年5月推出的Java程式設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於個人PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。在全球雲端計算和移動網際網路的產業環境下,Java更具備了顯著優勢和廣闊前景。


2.編輯好的程式到成為可以執行的可執行檔案,要經歷哪幾個過程?
答:1.預處理:輸入源程式並存盤(.C)
2.編譯:將源程式翻譯為目標檔案(.OBJ)
3.連結:將目標檔案生成可執行檔案( .EXE)
4.執行:執行.EXE檔案,得到執行結果


3.現階段為什麼要學習C語言,而不是其他的程式語言?C語言有什麼特點?
答:C作為入門語言,其原因是C比較接近底層,又有一定的抽象性,雖然將來未必會使用它,但可以更瞭解計算機原理以及資料結構。可能對於大多數程式設計師來說沒太大用處,但原理和資料結構能以計算機角度來思考程式問題,寫出更高效的程式碼。這算是專業的程式設計師的一種修為。而且C現在還是主流,作為入門語言是很適合的。
  C語言是一種計算機程式設計語言,屬高階語言範疇。它既具有高階語言的特點,又具有組合語言的特點。它可以作為工作系統設計語言,編寫系統應用程式,也可以作為應用程式設計語言,編寫不依賴計算機硬體的應用程式,程式碼清晰精簡,十分靈活。


4.什麼是常量,什麼是變數?都有哪些分類?
答:常量是在全部操作過程中保持其值的命名項。  
常量只有六種:整型常量、浮點型常量、字元型常量及字串常量。
變數是一段實際連續儲存空間的別名。
由於數值的型別有多種,有整數、小數(浮點數)、字元等等,那麼對應的變數就有整型變數、浮點型變數、字元型變數。變數還有其他的具體分類。整型變數還可具體分為無符號型、長整型和短整型。浮點型也可分為單精度型、雙精度型和長雙精度型。此外還可以分為靜態變數static、外部變數extren、暫存器變數register和自動儲存變數auto。


5.識別符號的命名規範是什麼?
答:(1)識別符號由字母、數字和下劃線組成
(2)識別符號的第一位必須是字母或者下劃線,不能是數字
(3)大部分的程式語言都區分大小寫,但VB不是




6.什麼是資料型別?資料型別分為哪些種類?每種資料型別佔多少個位元組大小?每種資料型別的取值範圍怎麼計算?思考:對於資料型別為什麼要分類?
答:可以理解為固定記憶體大小的別名。
整型    int 4; long:8;
浮點型  float:8;
字元型  char:1;
無值型  void
還有各種數值,指標,結構體等相互結合的型別,任何型別都可以通過sizeof()函式得出結果。
資料型別分類是為了提高計算機計算和執行能力。也方便程式設計師直觀的除錯bug。


7.位元組大小是什麼意思?怎麼計算資料型別或者變數的位元組大小?
答:位元組就是這個字元陣列共有幾個元素;
一個位元組的長度為8bit,資料的長度由資料的型別來定義。
  一個英文字母(不分大小寫)佔一個位元組的空間,一箇中文漢字佔兩個位元組的空間。一個二進位制數字序列,在計算機中作為一個數字單元,一般為8位二進位制數,換算為十進位制。最小值0,最大值255。如一個ASCII碼就是一個位元組。




8.什麼是原碼?什麼是補碼?什麼是反碼?正數的原碼補碼反碼怎麼表示,負數的原碼補碼反碼怎麼表示?
答:1. 原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:
[1111 1111 , 0111 1111]

[-127 , 127]
原碼是人腦最容易理解和計算的表示方式.
2. 反碼
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可見如果一個反碼錶示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.
3. 補碼
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
對於負數, 補碼錶示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.


9.運算子有哪幾種?每種運算子進行什麼運算?
答:算術運算子:用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(--)共七種。
關係運算符:用於比較運算。包括大於(>)、小於(<)、等於(==)、 大於等於(>=)、小於等於(<=)和不等於(!=)六種。
邏輯運算子:用於邏輯運算。包括與(&&)、或(||)、非(!)三種。
位操作運算子:參與運算的量,按二進位制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
賦值運算子:用於賦值運算,分為簡單賦值(=)、複合算術賦值(+=,-=,*=,/=,%=)和複合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
條件運算子:這是一個三目運算子,用於條件求值(a?b:c)。
逗號運算子:用於把若干表示式組合成一個表示式(,)。
指標運算子:用於取內容(*)和取地址(&)二種運算。
求位元組數運算子:用於計算資料型別所佔的位元組數( sizeof() )。
特殊運算子:有括號(),下標[],成員(→,.)等幾種。




10.C語言中有哪些控制語句,每種控制語句有什麼功能?
答:C語言9種控制語句
①if( )~else      條件語句
②for( )~         迴圈語句
③while( )~       迴圈語句
④do~while( )     迴圈語句
⑤continue        結束本次迴圈語句
⑥break           中止執行switch或迴圈語句
⑦switch          多分支選擇語句
⑧goto            轉向語句
⑨return          從函式返回語句


11.搞清楚if...else,for迴圈,while迴圈,switch...case怎麼執行的?
答:if…else:if和控制表示式改版了程式的控制流程,不再按從前到後的順序執行,而是根據資料不同的條件語句執行不同的語句。 
For迴圈:先判斷後執行。
While迴圈:先判斷後執行,計算表示式的值,當值為真(非0)時,執行迴圈語句。
Switch…case:針對整型或者字元型,按順序執行,每一個case對於一個break。




12.break和continue有什麼區別?
答:break是結束整個迴圈體,continue是結束單次迴圈。