跳轉到內容

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)
        /      %
   +      -
   <<     >>
   <      <=     >      >=
   ==     !=
   &

   ^
   |
   &&
   ||
   ?:
   =      +=     -=     *=     /=     %=     >>=     <<=     &=
   ^=     |=
   , 

當然,可以使用括號來控制優先順序。如果對錶達式的評估順序有疑問,請新增更多括號。它們不會造成任何麻煩,並且可能會避免一些痛苦。

高階數學運算可作為庫函式使用。這些將在後面的章節中討論。

華夏公益教科書