C 語言快速導覽 - 運算子

C 語言提供多樣、功能完整的運算子,依運算子結合後運算的優先次序,如下列表

運算子結合規則
() [] -> .左到右
! ~ ++ -- + - * & (type) sizeof右到左
* / %左到右
+ -左到右
<< >>左到右
< <= > >=左到右
== !=左到右
&左到右
^左到右
|左到右
&&左到右
||左到右
?:右到左
= += -= /= %= &=右到左
^= |= <<= >>=右到左
,左到右


依功能區分,可分為


算術運算子



C 語言的算術運算子包含加、減、乘、除、取餘數,皆需兩個運算元構成運算式,如下列表
運算子功能範例
+a + b
-a - b
*a * b
/a / b
%取餘數a % b


請參考 C 語言的算術運算有更詳細的敘述。




遞增及遞減運算子



遞增及遞減則為單元運算子,也就是說只需要一個運算元即構成運算式,但在運算元有前後的差別
運算子功能範例
++前遞增++a
++後遞增a++
--前遞減--a
--後遞減a--


請參考 C 語言的遞增遞減運算有更詳細的敘述。




關係運算子



C 語言的關係運算子都需要兩個運算元,包含小於、小於等於、大於、大於等於,另外有兩個測試相等性的運算子,運算結果會以 0 表示假, 1 表示真
運算子功能範例
<小於a < b
<=小於等於a <= b
>大於a > b
>=大於等於a >= b
==相等a == b
!=不等a != b


請參考 C 語言的關係運算有更詳細的敘述。




邏輯運算子



C 語言的邏輯運算子包含邏輯非,施用於單一運算元,其他邏輯且、或都需要兩個運算元
運算子功能範例
!!a
&&a && b
||A || b


請參考 C 語言的邏輯運算有更詳細的敘述。




位元運算子



C 亦提供給整數型態進行逐位元運算的運算子,例如某 16 位元整數如下
0000111100001111

取其補數該整數會變成
1111000011110000


這樣的位元補數運算子在 C 是用 ~ 運算子,全部的位元運算子如下表
運算子功能範例
&a & b
|a | b
^互斥或a ^ b
<<向左位移a << b
>>向右位移a >> b
~取 1 的補數~a


請參考 C 語言的位元運算有更詳細的敘述。




cast 運算子



C 語言的 cast 運算子的用途作為強迫轉型,基本格式下



這樣子 operand 會被強迫轉換型態為小括弧中的 type 。


請參考 C 語言的強制轉型有更詳細的敘述。




sizeof 運算子



C 語言的 sizeof 運算子的用途作為計算資料型態所佔的位元組數,其中的資料型態所括基本資料型態及衍生資料型態,基本格式如下



請參考 C 語言的 sizeof 運算子有更詳細的敘述。




指派運算子



C 語言最基本的指派運算子為單一個等號 = ,這是用來將等號右邊的值拷貝給給左邊的變數資料。等號也可以跟其他運算子合用,會直接將結果儲存到原變數之中,如
運算子功能範例
=指派a = b
+=相加同時指派a += b
-=相減同時指派a -= b
/=相除同時指派a /= b
%=取餘數同時指派a %= b
&=位元且同時指派a &= b
^=位元互斥或同時指派a ^= b
|=位元或同時指派a |= b
<<=位元向左位移同時指派a <<= b
>>=位元向右位移同時指派a >>= b


請參考 C 語言的指派運算有更詳細的敘述。




條件運算子



條件運算子是 C 語言裡唯一的三元運算子 ?: ,需要三個運算元,三者均可為運算式,形式如下



若運算式 expr1 為真,運算結果會是運算式 expr2 計算出的值,若為假,運算結果則是運算式 expr3 計算出的值。


請參考 C 語言的條件運算式有更詳細的敘述。




跟指標有關的運算子



C 語言中宣告指標變數的單元運算子為星號 * ,這與乘法運算子相同,編譯器會依前後文判斷星號作為乘法運算子還是宣告指標變數。另外,星號也作為單元的取值或反參考運算子。


當宣告指標變數後,要賦予指標變數某資料的位址,就要用單元的取址運算子 & ,這與位元運算子中的且是相同的,編譯器也會依前後文來判斷用途。


請參考 C 語言的指標有更詳細的敘述。




跟結構有關的運算子



C 語言中跟結構有關的運算子的運算子有兩個,結構成員運算子 . ,這跟小數點一樣,由結構名稱存取結構成員之用。另外一個是結構指標運算子 -> ,這是一個減號緊接著一個大於符號,可以讓指向結構的指標直接存取結構成員。


請參考 C 語言的結構有更詳細的敘述。




跟陣列有關的運算子



C 語言中跟陣列有關的運算子就是中括弧 [] ,利用索引來存取陣列中的元素。


請參考 C 語言的陣列有更詳細的敘述。




小括號、逗點與分號



C 語言中小括號 () 運算的優先次序最高,小括號可以用為夾住任何運算式,使該運算式可以優先被計算,另外,小括號也用在函數之中,定義或呼叫函數的參數列也是用小括號圍起來的。


逗號 , 運算的優先次序最低,因為逗號只是在同一陳述中做分隔用。


分號 ; 沒有計算優先次序的高低,因為分號用為陳述結束的標記。





沒有留言: