關於C語言的基礎知識:
一、C語言的所有數據類型
二、常量與變量
常量:
常量:在程序運行過程中,其值不能改變的量成爲常量。
類型:整型常量(int)、實型常量(float和double)、字符常量(char)、字符串常量;其中整型常量分爲短整型(short int)、長整型(long int)、無符號型(unsigned int)等。
1. 整型常量
都以二進制形式存儲
① 十進制整型常量
② 八進制整型常量,以數字0開頭。用合法的八進制數字表示,各位數字分別是0到7
③ 十六進制整型常量,以數字0和字母x(或大寫字符X)開頭,各位數字分別是0到15,其中10(A-a)、11(B-b)、12(C-c)、13(D-d)、14(E-e)、15(F-f);如0x10,0Xff,0X8
2. 實型常量
實型常量:即數值常量,有正負之分,只能用十進制形式表示。可以用小數形式或指數形式表示。實型常量不分單、雙精度,但可賦給一個float型或double型變量。其中,指數形式的浮點常量E或e前面必須有數字,E或e後面必須爲整數。
3. 字符常量
字符常量:用一對單撇號括起來的一個字符,如'a'。單撇號只是字符與其他部分的分隔符或是定界符,並不是常量的一部分
4. 轉義字符
有些字符和命令無法通過鍵盤直接輸入,因而借用一個符號或數字來表示。\ 是起始符。
類型:① 字符轉義系列 ② 數字轉義系列
3種表示方法:
① 反斜槓開頭後面跟一個字母代表一個控制字符;\n \t \r \b
② \\ 代表 \,用\’代表引號字符
③ 輸出不能直接從鍵盤上輸入或不能用字符常量書寫的ASCII字符;\ddd:1-3位八進制所代表的字符;\xhh:1-2位十六進制所代表的字符
5. 字符串常量
簡稱爲字符串。雙撇號爲定界符,不屬於字符串。
字符串中的字符數稱爲該字符串的長度,在存儲時,系統自動在字符串的末尾加一個字符串結束表示,是轉義字符\0,即多佔一個字節,其標記作用。
6. 符號常量
標識符代替常量。
#define PRICE 30,凡此後在本文件出現的PRICE都代表30,可和常量一起進行運算。
在作用域類不能改變,也不能再被賦值。
好處:含義清楚;一改全改。
7. 布爾類型
Bool是無符號的整型變量。<stdbool.h>提供了true(1)和flase(0)。
變量:
程序運行中可以發生變化的量。佔據一定的存儲單元,存放變量的值,保存程序運行中的輸入數據,獲得中間結果和最終結果。
① 變量的聲明:一個定義語句可以同時定義多個變量。可在函數體之外,也可在函數體或符合語句內。
② 變量的初始化:可在聲明變量的同時對其初始化;也可對聲明的變量的一部分初始化。不同類型的數據在內存佔據不同的存儲區;一種數據類型對應着一個值的範圍;一種數據類型對應着一組允許的操作,如對整型數據可進行求餘。
先聲明語句指定變量的類型,在編譯時指定的類型分配其一定的存儲空間,並決定數據的存儲方式和允許操作的方式。
變量定義後設計4個相關的內容:變量名、變量的存儲空間及內容、變量的地址、變量的作用域。
三、標識符和關鍵字
語法單位分爲六類:標識符、關鍵字、常量、字符串、運算符、分隔符。
1. 標識符
是給程序中的實體(變量、常量、函數、數組、結構體)以及文件所起的名字。即是一個名字,由設計者或系統指定。
規則如下:
① 以字母(A-Z,a-z)和下劃線“_”開頭,由字母、數字字符(0-9)和下劃線組成的字符系列。
② 系統使用了下劃線開頭的標識符。
③ 長度無規定
④ 區分大小寫
原則如下:
① 見名知其意
② 變量名和函數名小寫,符號常量大寫
③ 避免混淆的字符
2. 關鍵字
由編譯程序預定義、有固定含義的、在組成結構上由小寫字母構成的標識符。又稱保留字,保留專門用途的特殊標識符。
四、整型數在計算機中的存儲方式
1. 內存儲器的最小存儲單位成爲“位”(bit);8個二進制位組成一個“字節”(byte);給4個字節分配一個地址,若干字節組成一個“字”(word)。用一個字來存放一條機器指令或一個數據。
2. 最右邊的一位稱爲最低位,最左邊的一位稱爲最高位。最高位(最左邊一位)用以存放整數的符號。0位正整數,1爲負整數。
3. 原碼
把整數的絕對值用二進制表示,最高位用於表示符號,0是正數,1是負數。二進制位越多,表示數的範圍越大。符號不同的兩個數不能直接相加,也不能直接相減。
4. 反碼
正數的反碼和原碼相同。
負數的反碼是對該數的原碼除了符號位外各位取反。
5. 補碼
正數的補碼和原碼相同;
負數的補碼是在該數的反碼的最後(最右邊)一位加1。
引入補碼後,計算機的加減運算都可用加法來實現。
6. 正整數的原碼、反碼、補碼相同。
求負整數的補碼步驟:
① 求負整數的原碼 ② 在原碼的基礎上求反碼 ③ 在反碼的基礎上加1
五、有符號的數據類型和無符號的數據類型
1. 在內存存儲整數時,一般用最高位(最左邊一位)表示符號。數值以補碼的形式存放。
2. 無符號(unsigned)的整型數據,將二進制形式的最左位不作爲符號,而與右邊各位一起用來表示數值,若定義了unsigned int 只能存放正數而不能存放負數。
3. 字符型的數據也有singed和unsigned兩種數據類型。字符型的數據佔一個字節(8位),標準的ASCII字符允許範圍0到127,用7位即可,最左邊一位補0。
4. 實型數據沒有unsigned 和 singed之分,均帶符號
六、運算符和表達式
運算即對數據的加工。C語言對數據的基本操作和處理都是運算符來完成的。稱爲運算符或操作符。被運算的對象——數據稱爲運算量或操作數。
運算符可執行對操作數的各種操作,按操作數分爲單目(一元)運算數、雙目(二元)運算符、三目(三元)運算符。
運算符的功能:算術運算符、關係運算符、邏輯運算符、自增與自減運算符、賦值運算符、條件運算符。
表示數組下標[]、表示函數調用()、表示順序求值,,以及類型強制轉換符(類型)。
具體歸納如下:
表達式:對哪些數據,以什麼順序及其施加什麼操作。
表達式=運算符+運算符量(常量、變量、函數)
表達式運算規則:由運算符的功能和運算符的優先級與結合性決定。將運算符分成若干組,按運算符執行先後順序爲每組規定一個等級-優先級;處於同一優先級的運算符順序稱爲運算符的結合性,從左到右或從右到左。
1. 賦值運算符和賦值表達式
① 當賦值符號兩邊數據類型不同時,系統自動進行類型轉換,將賦值號右邊表達式的類型轉換爲左邊變量的類型,再賦值。
賦值運算符的優先級僅僅高於逗號運算符,自右向左的結合性。
算術運算符高於賦值運算符。
有括號的堅持括號優先。
2. 算術運算符和算術表達式
算術運算符:+、-、*、/、%、++、--
雙目運算符+、-、*、/的操作數可以是任何整數或浮點數;其中+、-可用於指針加或減一個整數。
雙目運算符的兩個操作數類型可以不同,運算前遵循類型的一般算術轉換規則自動轉換成相同的類型,運算結果的類型與轉換後操作數的類型相同。
轉換原則:值域較窄的類型向值域較寬的類型轉換。例,13.0+5=180.0-5(int)被轉換爲double;'d'-97=100 – 'd(char)'被轉換爲int;
運算符 / :兩操作數都是整數,則執行整除數;否則,執行實數除,結果爲浮點數
運算符 % :兩操作數必須是整數,結果也是整數,值爲左操作數除以右操作數所得的餘數
運算符 ++、--:即可用在前綴,也可用在後綴,結構是使變量增1或減1;
++a前綴:先增加、減少再取值;即先自增後運算
a++後綴:先取值,再增加、減少;即先運算後自增
運算的結合方向是自右向左;只能用於整型變量。
3. 長度測試符號sizeof
測試某個類型的變量所佔用計算機內存空間的字節長度
4. 關係運算符和關係表達式
① 關係運算符:即比較運算符,比較兩個運算對象值的大小
關係運算符爲雙目運算符,方向爲從左向右;結果爲1(真)或0(假);
算術運算符高於關係運算符
② 關係表達式
關係表達式=關係運算符+運算對象+小括號組成的表達式;表達式成立返回整型值1;否則返回0。
運算方向是從左到右:x=10>5>3;
5. 邏輯運算符與邏輯表達式
① 邏輯運算符-自左向右
優先級次序:邏輯非>算術運算>關係運算>邏輯與>邏輯或>賦值運算
② 邏輯表達式
用邏輯運算符將關係表達式連接起來構成邏輯表達式。
對象可是C語言中任意合法的表達式。
結果爲1(真)、0(假)
非0數都爲真。
特性:必需執行下一個表達式才能求解時,才求該表達式;並不是所有的表達式都被求解。
&&:前一個表達式爲假(0),都爲假(0);
||:前一個表達式爲真(1),都爲真(1);
6. 條件運算符與條件表達式
條件運算符 ? 是C語言提供唯一一個三目運算符。
執行順序:先求解表達式1,若爲1,再求解表達式2,則該表達式的值就爲整個表達式的值;
若表達式1的值爲0,則求解表達式3,則該表達式的值就爲整個表達式的值。
格式:表達式1?表達式2:表達式3
條件運算符的優先級別僅僅高於賦值運算符,低於關係運算符和算術運算符。
結合方向:自右向左,例a>b?a:c>d?c:d;等價於 a>b?a:(c>d?:c:d);
7. 逗號運算符與逗號表達式
即順序求值運算符。
從左向右依次計算表達式1,扔掉表達式1的值,再計算表達式2。
逗號表達式可以和另外一個表達式組成一個新的逗號表達式;
在變量和函數表中逗號起間隔符作用;
逗號表達式是將各個表達式串聯起來
8. 位運算
對運算對象按照二進制位進行操作,對字節或字中的實際位進行檢測、設置、位移
運算對象只能是字符型或整型變量及它們的變體。
① 按位取反(~):對二進制按位取反,1變0,0變1
② 按位與(&):參加運算的兩個數據,按照二進制位進行&運算,如兩個相應的二進制都爲1,則該位的結果爲1,否則爲0
功能:清0;全部二進制位爲0,條件:原數中爲1的位,新數中爲0;
取一個數中的某些指定位;如取高字節、或低字節
③ 按位或|;一個爲1即爲1;某一個數據的某些特殊位置,低8位與高8位
④ 按位異或^。判斷兩個相應位的值是否不同,不同爲1,否則爲0。
功能:特定位反轉;與0相異或保留原值;不用中間變量就可交換兩個數的值
⑤ 左移<< ,乘法,移位後,右端出現的空位補0,移出左端之外舍棄
⑥ 右移>>,除法,二進制位右移2位,右端低位捨棄,高位補0