遞增、遞減、指定運算


在程式中對變數遞增 1 或遞減 1 是很常見的運算,例如:

int i = 0;

i = i + 1;
printf("%d\n", i);

i = i - 1;
printf("%d\n", i);

這段程式會分別顯示出1與0兩個數,你也可以這麼寫這個程式:

int i = 0;
printf("%d\n", ++i);
printf("%d\n", --i);

其中寫在變數 i 之前的 ++-- 就是 C 的遞增運算子(Increment operator)與遞減運算子(Decrement operator),當它們撰寫在變數之前時,其作用就相當於將變數遞增 1 與遞減 1:

++i;      // i = i + 1; 
--i;      // i = i - 1;

你可以將遞增或遞減運算子撰寫在變數之前或變數之後,但其實兩者是有差別的,將遞增(遞減)運算子撰寫在變數前時,表示先將變數的值加(減)1,然後再傳 回變數的值,將遞增(遞減)運算子撰寫在變數之後,表示先傳回變數值,然後再對變數加(減)1,例如:

int i = 0;
int num = 0;

num = ++i;   // 相當於i = i + 1; num = i;
printf("%d\n", num);

num = --i;    // 相當於i = i - 1; num = i;
printf("%d\n", num);

在這段程式中,num 的值會前後分別顯示為 1 與 0,再看看下面這段:

int i = 0;
int num = 0;

num = i++;    // 相當於num = i; i = i + 1;
printf("%d\n", num);

num = i--;     // 相當於 num = i; i = i - 1;
printf("%d\n", num);

在這段程式中,num 的值會顯示前後分別為 0 與 1。

接下來看指定運算子(Assignment operator),到目前為止我們只看過一個指定運算子,也就是=這個運算子,事實上指定運算子還有以下的幾個:

  • +=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 就是 a = a >> b