運算符(第二部份)

前頁 目錄 下頁

改型運算符 更多賦值運算符 多量的賦值 增值及減值運算符

改型運算符 Top

改型運算符臨時把其操作數(在改型運算符之後)的數據類型改變。這種運算符是由一對括號包著一個數據類型的名稱。它是一個單元運算符,它的操作數在運算符的右邊。

例如,假設 x 是一個整數類型的變量;數式「(float) x」臨時把 x 當作是一個浮點類型的變量。

以下程序舉了一些例子,說明改型運算符是怎樣使用的︰

程序五︰使用改型運算符
#include <iostream.h>

main()
{
  int a = 17, b = 5;
  float x, y;
  char ch = 'A';

  // Compare the following:
  cout <<
(float) a / b << endl;         // 顯示的是 3.4。
  cout << a / b << endl;                 // 顯示的是 3。

  x = a /
(float) b;                     // x 儲存的是 3.4。
  y = a / b;                             // y 儲存的是 3。
  cout << "x=" << x << " y=" << y << endl;

  cout << ch << endl;                    // 顯示的是「A」。
  cout <<
(int) ch << endl;              // 顯示的是 65(「A」的 ASCII 碼)。

  return 0;
}

更多賦值運算符 Top

除了「=」以外,C++ 有另外十個賦值運算符。以下是其中五個︰

賦值運算符 算式範例 註釋
+= a += 7 a = a + 7
-= b -= 3 b = b - 3
*= c *= 2 c = c * 2
/= d /= 5 d = d / 5
%= e %= 4 e = e % 4

所有賦值運算符是雙元的。

一般來說,假設 <運算符> 是「+」、「-」、「*」、「/」或「%」其中一個運算符︰
  <變量> <運算符>= <算式>;
以上形式的語句可以改寫成以下形式︰
  <變量> = (<變量>) <運算符> (<算式>);

以下程序用了這些賦值運算符︰

程序六︰使用特別的賦值運算符
#include <iostream.h>

main()
{
  int a, b;
  char c;

  a = 14;
 
a -= 3;                // a 被賦予的值是 11。
  cout << a << endl;

  b = 7;
 
b += a * 3;            // b 被賦予的值是 7 + 11 * 3 = 40。
  cout << b << endl;

  c = 'A';
 
c += 3;                // c 被賦予的值是 'D'。
  cout << c << endl;

  return 0;
}

多量的賦值 Top

在大部份的程序語言(包括 Pascal)中,賦值必須使用一個語句去進行,而賦值這運算並沒有回傳任何東西。不過,在 C++ 中,賦值可以當作成算式,而且還可以回傳一個值。因此,一個語句可以有多量的賦值。試看看以下程序︰

程序七︰多量的賦值
include <iostream.h>

main()
{
  int a, b, c, d, e;

  // 首先 b 被賦予的值是 3,然後 a 被賦予的值是 3。

  a = b = 3;

  // 首先 b 被賦予的值是 3*7 = 21,然後 c 被賦予的值是 21。

  c = b *= 7;

  // 首先 d 被賦予的值是 8,然後 c 被賦予的值是 21+8 = 29。
 
c += d = 8;

  // 首先 a 被賦予的值是 3+1 = 4,然後 e 被賦予的值是 7*4 = 28。
 
e = 7 * (a += 1);

  cout << "a\tb\tc\td\te\n";
  cout << a << "\t" << b << "\t" << c << "\t" << d << "\t" << e << endl;

  return 0;
}

a = b = 3;
在一個多量賦值的語句中,賦值的運算次序是由右至左。因此,賦值「b = 3」最先被執行,而這算式回傳的值是 3。因此跟著被執行的是賦值「a = 3」。

c = b *= 7;
在這語句中,賦值「b *= 7」最先被執行。儲存在 b 的值是 3*7=21,而這也是回傳的值。跟著被執行的賦值是「c = 21」。

c += d = 8;
在這語句中,賦值「d = 8」最先被執行,而回傳的值是 8。跟著賦值「c += 8」被執行,即 21+8=29 會被儲存在 c 中。

e = 7 * (a += 1);
賦值運算的優先次序比乘法為低,因此語句中的括號是不可缺少的。賦值「a += 1」被執行後,3+1=4 會被儲存在 a 中,回傳的值是 4。最後,「e = 7 * 4」被執行,28 被儲存在 e 中。


增值及減值運算符 Top

C++ 提供兩種增值運算符及兩種減值運算符

運算符 運算符名稱 算式範例 註釋
++<操作數> 前置增值 ++a a 先被增加一,然後使用 a 的新值去計算算式其他部份。
<操作數>++ 後置增值 b++ 先用 b 的現有值去計算算式其他部份,然後才把 b 的值增加一。
--<操作數> 前置減值 --c c 先被減去一,然後使用 c 的新值去計算算式其他部份。
<操作數>-- 後置減值 d-- 先用 d 的現有值去計算算式其他部份,然後才把 d 的值減去一。

所有的增值及減值運算符均為單元運算符。從上表得知,前置增值及前置減值運算符的操作數在運算符的右邊,而後置增值及後置減值運算符的操作數在運算符的左邊。

以下程序展示了前置增值及後置增值運算符不同的地方。留意前置減值及後置減值運算符也有對應的特點。

程序八︰使用增值運算符
#include <iostream.h>

main()
{
  int i = 1,    // i 被初始化為 1。
      j;

  cout << i << endl;

  // 「i++」及「++i」當被用作獨立的語句(不是算式的一部份)時,兩者並無可見的分別。
 
i++;          // i 被增值至 2.
  cout << i << endl;
 
++i;          // i 被增值至 3.
  cout << i << endl;

 
j = i++;      // j 先被賦予 3,然後 i 才被增值至 4。
  cout << "i=" << i << ", j=" << j << endl;
 
j = ++i;      // i 先被增值至 5,然後 j 才被賦予 5。
  cout << "i=" << i << ", j=" << j << endl;

  return 0;
}

這些運算符也可用於字符變量及浮點變量。

前頁 目錄 下頁