C++ 提供多樣、功能完整的運算子 (operator) ,依運算子結合後運算的優先次序 (precedence) ,如下列表
運算子 | 結合規則 | |
---|---|---|
1 | :: | 左到右 |
2 | () | 左到右 |
[] | ||
-> | ||
. | ||
++ | ||
-- | ||
dynamic_cast | ||
static_cast | ||
reinterpret_cast | ||
const_cast | ||
typeid | ||
3 | ! | 右到左 |
not | ||
~ | ||
compl | ||
++ | ||
-- | ||
- | ||
+ | ||
* | ||
& | ||
sizeof | ||
new | ||
new [] | ||
delete | ||
delete [] | ||
(type) | ||
4 | ->* | 左到右 |
.* | ||
5 | * | 左到右 |
/ | ||
% | ||
6 | + | 左到右 |
- | ||
7 | << | 左到右 |
>> | ||
8 | < | 左到右 |
<= | ||
> | ||
>= | ||
9 | == | 左到右 |
eq | ||
!= | ||
not_eq | ||
10 | & | 左到右 |
bitand | ||
11 | ^ | 左到右 |
xor | ||
12 | | | 左到右 |
bitor | ||
13 | && | 左到右 |
and | ||
14 | || | 左到右 |
or | ||
15 | ?: | 右到左 |
16 | = | 右到左 |
+= | ||
-= | ||
*= | ||
/= | ||
%= | ||
&= | ||
and_eq | ||
^= | ||
xor_eq | ||
|= | ||
or_eq | ||
<<= | ||
>>= | ||
17 | throw | |
18 | , | 左到右 |
依功能區分,可分為
- 算術運算子 (arithmetic operator)
- 遞增 (increment) 及遞減運算子 (decrement operator)
- 關係運算子 (relational operator)
- 邏輯運算子 (logical operator)
- 位元運算子 (bitwise operator)
- cast 運算子 (cast operator)
- sizeof 運算子 (sizeof operator)
- 指派運算子 (assignment operator)
- 條件運算子 (conditional operator)
- 跟指標 (pointer) 有關的運算子
- 跟參考 (reference) 有關的運算子
- 跟結構 (structure) 有關的運算子
- 跟陣列 (array) 有關的運算子
- 跟物件 (object) 有關的運算子
- 拋出例外 (exception) 有關的運算子
- 小括號跟逗點
算術運算子
C++ 的算術運算子包含加、減、乘、除、取餘數,皆需兩個運算元 (operand) 構成運算式 (expression) ,如下列表
運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | a + b |
- | 減 | a - b |
* | 乘 | a * b |
/ | 除 | a / b |
% | 取餘數 | a % b |
遞增及遞減運算子
遞增及遞減則為單元運算子 (unary operator) ,也就是說只需要一個運算元即構成運算式,但在運算元有前後的差別
運算子 | 功能 | 範例 |
---|---|---|
++ | 前遞增 | ++a |
++ | 後遞增 | a++ |
-- | 前遞減 | --a |
-- | 後遞減 | a-- |
關係運算子
C++ 的關係運算子都需要兩個運算元,包含小於、小於等於、大於、大於等於,另外有兩個測試相等性的運算子,運算結果會是 bool 型態的數值,不是 true 就是 false
運算子 | 功能 | 範例 |
---|---|---|
< | 小於 | a < b |
<= | 小於等於 | a <= b |
> | 大於 | a > b |
>= | 大於等於 | a >= b |
== | 相等 | a == b |
!= | 不等 | a != b |
邏輯運算子
C++ 的邏輯運算子包含邏輯非,施用於單一運算元,其他邏輯且、或都需要兩個運算元
運算子 | 功能 | 範例 |
---|---|---|
! | 非 | !a |
&& | 且 | a && b |
|| | 或 | A || b |
位元運算子
C++ 亦提供給整數型態 (integer type) 進行逐位元運算的運算子,例如某 16 位元 (bit) 整數 (integer) 如下
0000111100001111
取其補數 (complement) 該整數會變成
1111000011110000
這樣的位元補數運算子在 C++ 是用 ~ 運算子,全部的位元運算子如下表
運算子 | 功能 | 範例 |
---|---|---|
& | 且 | a & b |
| | 或 | a | b |
^ | 互斥或 | a ^ b |
<< | 向左位移 | a << b |
>> | 向右位移 | a >> b |
~ | 取 1 的補數 | ~a |
cast 運算子
C++ 的 cast 運算子的用途作為強迫轉型 (explicit conversion) ,基本格式下
這樣子 operand 會被強迫轉換型態為小括弧中的 type 。
sizeof 運算子
C++ 的 sizeof 運算子的用途作為計算物件或資料型態所佔的位元組數 (byte) ,有以下三種形式
- sizeof (type name);
- sizeof (expr);
- sizeof expr;
指派運算子
C++ 最基本的指派運算子為單一個等號 = ,這是用來將等號右邊的值拷貝給給左邊的變數資料。等號也可以跟其他運算子合用,會直接將結果儲存到原變數之中,如
運算子 | 功能 | 範例 |
---|---|---|
= | 指派 | a = b |
+= | 相加同時指派 | a += b |
-= | 相減同時指派 | a -= b |
/= | 相除同時指派 | a /= b |
%= | 取餘數同時指派 | a %= b |
&= | 位元且同時指派 | a &= b |
^= | 位元互斥或同時指派 | a ^= b |
|= | 位元或同時指派 | a |= b |
<<= | 位元向左位移同時指派 | a <<= b |
>>= | 位元向右位移同時指派 | a >>= b |
條件運算子
條件運算子是 C++ 裡唯一的三元運算子 ?: ,需要三個運算元,三者均可為運算式,形式如下
若運算式 expr1 為真,運算結果會是運算式 expr2 計算出的值,若為假,運算結果則是運算式 expr3 計算出的值。
跟指標有關的運算子
跟指標有關的運算子有 & 及 * ,往後才會陸續介紹。
跟參考有關的運算子
跟參考有關的運算子有 * ,往後才會陸續介紹。
跟結構有關的運算子
跟結構有關的運算子有 -< 及 . ,往後才會陸續介紹。
跟陣列有關的運算子
跟陣列有關的運算子有 [] ,往後才會陸續介紹。
跟物件有關的運算子
跟物件有關的運算子有 . 、 new 、 delete 、 ->* 及 .* ,往後才會陸續介紹。
拋出例外的運算子
拋出例外的運算子為 throw ,往後才會陸續介紹。
小括號跟逗點
小括號 () 的計算優先次序最高,因此小括號內的運算式會先被計算 (evaluate) ,而逗點 , 的計算優先次序最低,通常是用作分隔。
中英文術語對照 | |
---|---|
運算子 | operator |
優先次序 | precedence |
算術運算子 | arithmetic operator |
遞增運算子 | increment operator |
遞減運算子 | decrement operator |
關係運算子 | relational operator |
邏輯運算子 | logical operator |
位元運算子 | bitwise operator |
cast 運算子 | cast operator |
sizeof 運算子 | sizeof operator |
指派運算子 | assignment operator |
條件運算子 | conditional operator |
指標 | pointer |
參考 | reference |
結構 | structure |
陣列 | array |
物件 | object |
例外 | exception |
運算元 | operand |
運算式 | expression |
單元運算子 | unary operator |
整數型態 | integer type |
位元 | bit |
整數 | integer |
補數 | complement |
強迫轉型 | explicit conversion |
位元組數 | byte |
計算 | evaluate |
您可以繼續參考
基本概念
標記
基本資料型態
相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁
參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial
C++ Primer, Fourth Edition, Stanley B. Lippman...
本文於 2013 年 1 月更新
沒有留言:
張貼留言