Try   HackMD

運算子與運算式

運算式簡介

運算式是由運算子(operand)與運算子(operator)組成的,例如下面的sumi為運算元,+=為運算子。
sum = sum + i;

一元運算子(unary operator)

包含 +(正號) 、-(負號) 、++--=

二元運算子(binary operator)

包含 算術運算子 、位元運算子等等

三元運算子(ternary operator)

僅有 條件運算子? 一種

常見運算子

分類 運算子 功能
指定運算子 = 將右值指定至左側變數
算數運算子 + - * / 即為數學上的運算符號
算數運算子 % 取餘數
位元運算子 >> << & | ~ ^ 做位元運算使用
複合指定運算子 += -= *= /= %=
 
遞增/遞減運算子 ++ --
關係運算子 == != > < >= <= 比較兩變數關係使用
邏輯運算子 && || ! 且、或、非 等邏輯判斷
條件運算子 ?
逗號運算子 , 分隔敘述使用
資料大小運算子 sizeof 取得資料大小
位址運算子 & 取址使用

複合指定運算子

複合指定運算子 一般運算子
i += j i = i + j
i -= j i = i - j
i *= j i = i * j
i /= j i = i / j
i %= j i = i % j
i >>= j i = i >> j
i <<= j i = i << j
i ^= j i = i ^ j
i &= j i = i & j
i |= j i = i | j

遞增/遞減運算子

遞增運算子 a++ 即為 a += 1 的簡寫。
遞減運算子 a-- 即為 a -= 1 的簡寫。

這兩種運算子皆有前置 ++a 及後置 a++ 的寫法,
前置與後置的區別在遞增(減)相較於其他行為的順序,
以下列程式碼為例:

int a = 10;
cout << "Test #1: ";
cout << a << ' ';
cout << a++ << ' ';
cout << a << endl;

a = 10;
cout << "Test #2: ";
cout << a << ' ';
cout << ++a << ' ';
cout << a << endl;

輸出為:

Test #1: 10 10 11
Test #2: 10 11 11

條件式

條件式泛指所有可以傳出 truefalse 結果的運算式,
例如 a > ba == b 等等。

除了可以用a > b外,也可以結合邏輯運算子&& || !等,
例如:a > b && b <= 10a != b 等等。

而在C++中,所有非 0 的值皆是 true0 代表 false
因此,變數、a % 2 等等也可以作為運算式。

詳細用法請參閱 選擇結構篇


條件運算子

用法: 邏輯條件式 ? 是true的值 : 是false的值

例子:

  • 給值

    ​​​​int a = (10 > 5 ? 10 : 5);
    ​​​​cout << a << endl;
    

    結果: 10

  • 輸出

    ​​​​int a, b;
    ​​​​cin >> a >> b;
    ​​​​cout << (a > b ? "a比較大" : "b比較大") << endl;
    

    輸入: 5 10
    輸出: b比較大

    這一個例子的邏輯有小問題,可以思考看看問題出現在哪裡,也可以嘗試去解決。

  • 判斷奇偶數

    ​​​​int a;
    ​​​​cin >> a;
    ​​​​cout << a << (a % 2 ? "是奇數" : "是偶數") << endl;
    

    比較帥的寫法:

    ​​​​int a;
    ​​​​cin >> a;
    ​​​​cout << a << (a & 1 ? "是奇數" : "是偶數") << endl;
    

    輸入: 5 10
    輸出:

    ​​​​5是奇數
    ​​​​10是偶數
    

強制轉型

強制轉型是利用()運算子來強制轉換變數的型態。
用法: (型態) 變數型態 (變數)

下方給一個簡單的例子:

int a = 3, b=2;
cout << (float)a/b << \n;

上述程式碼因為a b皆為整數型別,但相除時,若不強制轉換成浮點數,編譯器會認為運算結果也會是整數,所以需要在變數前強制轉型,才會正確顯示出1.5

除了上述的強制轉型外,也可以把數字強制轉型為字元,字元部分會依照ASCII編碼轉換。