C語言中的運算符
- 2019 年 10 月 5 日
- 筆記
1運算符和表達式
C語言運算符是說明特定操作的符號,它是構造C語言表達式的工具。C語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算符處理。除了常見的三大類,算術運算符、關係運算符與邏輯運算符之外,還有一些用於完成特殊任務的運算符,比如位運算符。

算數運算符:用於算數運算,包括+、-、* 、/等。
關係運算符:用於比較運算,包括>、<、==、!=等。
邏輯運算符:用於邏輯運算,包括 &&、||、!三種。
位操作運算符:按二進制位對位運算,包括&、|、~、<<等。
賦值運算符:用於賦值運算,包括=、+=、&=等。
條件運算符:三目運算符,用於條件求值(?:).
逗號運算符:用於把若干表達式組合成一個表達式(,)。
指針運算符:用於取內容*和用於取地址&。
求位元組數運算符:用於計算數據類型所佔的位元組數sizeof。
特殊運算符:()、[]、成員(->,.)等。
1.2運算符優先級
A.函數計算優先。
B.其次是強制類型轉換。
C.自增、自減和取反次之。
D.先乘除再加減。
E.有括號先算括號內的。
註:表達式中出現連續兩個運算符時最好用空格隔開,如a+++b要寫成:a++ +b或a+ ++b。同一優先級的運算符,運算次序由結合方向所決定。
也可以這樣記:!> 算術運算符 > 關係運算符 > && > || > 賦值運算符
2數據類型轉換
2.1強制類型轉換:就是顯示的將表達式轉換成所需類型。
方式1:(類型名)(表達式).
方式2:(類型名)表達式.
例:強制類型轉換。

註:強制類型轉換不會改變原來的變量和表達式的類型屬性,只是轉換成所需類型使用。
2.2隱含類型轉換:整型、單精度型和雙精度型的不同數值類型可以混合運 算,在運算過程中就有隱式類型轉換。
隱式類型轉換的規則就是:從低向高轉換,例如char和short可以轉 換為int。
3算術運算符與算術表達式
3.1基本算術運算符:包括+、-、*、/、%五個運算符。
3.2特殊的算術運算符:自加和自減。
前綴形式:先對運算對象自增或自減,再引用運算對象的值作為表達式 的值。
後綴形式:先引用運算對象的值作為表達式的值,再對運算對象自增或 自減。示例:
++a 等價於a=a+1,–a等價於a=a-1;
a++ 等價於a=a+1,a–等價於a=a-1;
註:可以看出單獨使用時沒有區別,但是在表達式中對表達式影響不同。
示例代碼:

4賦值運算符與賦值表達式
4.1簡單的賦值運算符
簡單賦值的作用就是將一個表達式的值賦給一個變量存儲起來,例如a=4;
註:賦值運算的左邊必須是變量;
賦值運算優先級比較低,僅優先於,;
4.2複合賦值運算符
就是把運算和賦值結合在一起,例如+=、-=等。
例如:m+=3 等價於 m=m+3;
4.3賦值表達式的運算
使用表達式應該注意的情況:
4.3.1複合的賦值運算符。
示例代碼:

5.邏輯運算符
邏輯運算符是根據表達式的值來返回真值或是假值。其實在C語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值。
符號功能

例如:

當表達式進行&&運算時,只要有一個為假,總的表達式就為假,只有當所有都為真時,總的式子才為真。當表達式進行||運算時,只要有一個為 真,總的值就為真,只有當所有的都為假時,總的式子才為假。邏輯非(!)運算是把相應的變量數據轉換為相應的真/假值。若原先為假,則邏輯非以後為真,若 原先為真,則邏輯非以後為假。
還有一點很重要,當一個邏輯表達式的後一部分的取值不會影響整個表達式的值時,後一部分就不會進行運算了。例如:

因為a=2,為真值,所以不管b-1是不是真值,總的表達式一定為真值,這時後面的表達式就不會再計算了。
6 關係運算符
關係運算符是對兩個表達式進行比較,返回一個真/假值。
符號功能

這些運算符大家都能明白,主要問題就是等於==和賦值=的區別了。
一些剛開始學習C語言的人總是對這兩個運算符弄不明白,經常在一些簡單問題上出錯,自己檢查時還找不出來。看下面的代碼:
if(Amount=123) ……
很 多新人都理解為如果Amount等於123,就怎麼樣。其實這行代碼的意思是先賦值Amount=123,然後判斷這個表達式是不是真值,因為結果為 123,是真值,那麼就做後面的。如果想讓當Amount等於123才運行時,應該if(Amount==123) ……
7 條件運算符
條件運算符(?:)是C語言中唯一的一個三目運算符,它是對第一個表達式作真/假檢測,然後根據結果返回兩外兩個表達式中的一個。
<表達式1>?<表達式2>:<表達式3>
在運算中,首先對第一個表達式進行檢驗,如果為真,則返回表達式2的值;如果為假,則返回表達式3的值。
例如:

8 逗號運算符
C語言中,多個表達式可以用逗號分開,其中用逗號分開的表達式的值分別結算,但整個表達式的值是最後一個表達式的值。
假設:

對於第一行代碼,有三個表達式,用逗號分開,所以最終的值應該是最後一個表達式的值,也就是d+3,為8,所以a=8。對於第二行代碼,那麼也是有三個表達 式,這時的三個表達式為a2=++b、c–、d+3,(這是因為賦值運算符比逗號運算符優先級高)所以最終表達式的值雖然也為8,但a2=3。
更多乾貨筆記關注微信公眾號 : 老九學堂