C 語言入門/C 運算子
C 支援以下算術運算子
c = a * b multiplication c = a / b division c = a % b mod (remainder division) c = a + b addition c = a - b subtraction
它還支援以下有用的(如果很神秘)“遞增”和“遞減”運算子
++a increment --a decrement
這些運算子也可以表示為“a++”和“a--”。如果只需要遞增或遞減,那麼兩種形式之間的區別無關緊要。但是,如果一個變數作為某個表示式的一部分被遞增或遞減,那麼“++a”表示“先遞增變數,然後獲取其值”,而“a++”表示“先獲取變數的值,然後遞增它”。忘記這種區別會導致細微的程式設計錯誤。
最後,C 支援一組位運算子
a = ~a bit complement a = b << c shift b left by number of bits stored in c a = b >> c shift b right by number of bits stored in c a = b & c b AND c a = b ^ c b XOR c a = b | c b OR c
C 允許以快捷方式執行數學運算
operation shortcut _________________________ a = a * b a *= b a = a / b a /= b a = a % b a %= b a = a + b a += b a = a - b a -= b a = a << b a <<= b a = a >> b a >>= b a = a & b a &= b a = a ^ b a ^= b a = a | b a |= b _________________________
C 關係運算符在上一章中討論過,這裡為了完整性而重複。
a == b equals a != b not equals a < b less than a > b greater than a <= b less than or equals a >= b greater than or equals
這些實際上是數學運算,如果為真則返回 1,如果為假則返回 0。以下運算在語法上是合理的
a = b * ( b < 2 ) + 10 * ( b >= 2 );
這將使“a”的值為“b”,如果“b”小於 2,否則為“10”。這很可愛,但不推薦。它很神秘;可能使移植到其他語言變得更加困難;並且在這種情況下,可以使用上一章中討論的條件運算子更有效地完成此操作。
a = ( b < 2 ) ? b : 10;
此條件運算子也稱為“三元”運算子。
存在類似的邏輯運算子
! logical NOT && logical AND || logical OR
請記住,這些是邏輯運算,而不是位運算——不要將“&&”和“||”與“&”和“|”混淆。區別在於,雖然位運算子對每個位執行運算,但邏輯運算子只是評估其運算元的值為 0 或 1(在這樣的比較中,任何非零運算元的值都評估為 1),並返回 0 或 1。
if(( A == 5 ) && ( B == 10 ))
{
...
}
最後,有一個“sizeof”運算子,它以位元組為單位返回特定運算元的大小
int tvar; ... printf ( "Size = %d\n", sizeof( int ) );
這對某些大容量儲存操作很有用。“sizeof()”函式可以接受資料型別名稱或變數名,變數可以是陣列,在這種情況下,“sizeof()”給出整個陣列的大小。
這些運算子在數學函式中的優先順序——也就是說,哪些運算子在其他運算子之前進行評估——定義如下,從最高優先順序到最低優先順序
() [] -> .
! ~ ++ -- (cast) & sizeof - (minus prefix)
/ %
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += -= *= /= %= >>= <<= &=
^= |=
,
當然,可以使用括號來控制優先順序。如果對錶達式的評估順序有疑問,請新增更多括號。它們不會造成任何麻煩,並且可能會避免一些痛苦。
高階數學運算可作為庫函式使用。這些將在後面的章節中討論。