運算子
下文中的所有語法, a
, b
, c
, condition1
, condition2
都是變數名稱。
算術運算子
名稱 |
語法 |
備註 |
正號(一元) |
+a |
|
負號(一元) |
-a |
|
加法(二元) |
a+b |
|
減法(二元) |
a-b |
|
乘法(二元) |
a*b |
|
除法(二元) |
a/b |
|
模數(二元) |
a%b |
取餘數 |
遞增/遞減運算子
名稱 |
語法 |
備註 |
前綴遞增(一元) |
++a |
先遞增再回傳值 |
後綴遞增(一元) |
a++ |
回傳值後再遞增 |
前綴遞減(一元) |
--a |
先遞增再回傳值 |
後綴遞減(一元) |
a-- |
回傳值後再遞減 |
位元運算子
名稱 |
語法 |
備註 |
|
位元 AND(一元) |
a&b |
|
|
位元 XOR(一元) |
a^b |
|
|
位元 OR(一元) |
`a |
b` |
|
位元 一的補數(一元) |
~a |
|
|
位元左移(二元) |
a<<b |
|
|
位元右移(二元) |
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 |
|
|
位元 AND + 賦值(二元) |
a&=b |
同 a=a&b |
|
|
位元 OR + 賦值(二元) |
`a |
=b` |
同`a=a |
b` |
位元 XOR + 賦值(二元) |
a^=b |
同 a=a^b |
|
|
位元左移 + 賦值(二元) |
a<<=b |
同 a=a<<b |
|
|
位元右移 + 賦值(二元) |
a>>=b |
同 a=a>>b |
|
|
比較運算子
名稱 |
語法 |
備註 |
小於(二元) |
a<b |
|
小於等於(二元) |
a<=b |
|
大於(二元) |
a>b |
|
大於等於(二元) |
a>=b |
|
等於(二元) |
a==b |
|
不等於(二元) |
a!=b |
|
邏輯運算子
名稱 |
語法 |
備註 |
|
|
邏輯 AND(二元) |
condition1 && condition2 |
|
|
|
邏輯 OR(二元) |
`condition1 |
|
condition2` |
|
邏輯 非(一元) |
!condition1 |
|
|
|
逗號運算子
名稱 |
語法 |
備註 |
逗號運算子(二元) |
a,b |
丟棄左值,回傳右邊的值 |
條件運算子
名稱 |
語法 |
備註 |
條件運算子(三元) |
a?b:c |
相當於 if(a){b}else{c} |
優先順序
說明
- 優先級越高(數字越小),會越先執行。
- 如果兩個運算子優先級相同,依照結合性的方向執行。
- 多載性只標註否的運算子,未標記的運算子都是可多載的。
名稱 |
語法 |
備註 |
多載性 |
結合性 |
|
|
優先級 1 |
|
|
|
|
|
|
|
:: |
作用域解析(C++ 專有) |
否 |
|
|
|
優先級 2 |
|
|
|
左到右 |
|
|
後綴遞增(一元) |
a++ |
回傳值後再遞增 |
|
|
|
|
後綴遞減(一元) |
a-- |
回傳值後再遞減 |
|
|
|
|
|
() |
函示呼叫 |
|
|
|
|
|
[] |
陣列存取 |
|
|
|
|
|
a.b |
以物件方式存取成員 |
否 |
|
|
|
|
a->b |
以指標方式存取成員 |
|
|
|
|
|
dynamic_cast |
執行時檢查類型轉換(C++ 專有) |
否 |
|
|
|
|
static_cast |
未經檢查的類型轉換(C++ 專有) |
否 |
|
|
|
|
reinterpret_cast |
重定義類型轉換(C++ 專有) |
否 |
|
|
|
|
const_cast |
更改非常數屬性(C++ 專有) |
否 |
|
|
|
|
typeid |
取得類型資訊(C++ 專有) |
否 |
|
|
|
優先級 3 |
|
|
|
右至左 |
|
|
前綴遞增(一元) |
++a |
先遞增再回傳值 |
|
|
|
|
前綴遞減(一元) |
--a |
先遞增再回傳值 |
|
|
|
|
正號(一元) |
+a |
|
|
|
|
|
負號(一元) |
-a |
|
|
|
|
|
邏輯 非(一元) |
!condition1 |
|
|
|
|
|
位元 一的補數(一元) |
~a |
|
|
|
|
|
間接 |
int val=*ptr |
透過指標間接操作變數 |
|
|
|
|
傳址 |
int *ptr=&a |
取得變數的記憶體位置 |
|
|
|
|
|
sizeof(a) |
取變數的記憶體大小 |
否 |
|
|
|
|
new , new[] |
動態記憶體分配(C++ 專有) |
|
|
|
|
|
delete , delete[] |
動態記憶體釋放(C++ 專有) |
|
|
|
|
優先級 4 |
|
|
|
左到右 |
|
|
|
.* |
成員物件選擇(C++ 專有) |
|
|
|
|
|
->* |
成員指標選擇(C++ 專有) |
|
|
|
|
優先級 5 |
|
|
|
左到右 |
|
|
乘法(二元) |
a*b |
|
|
|
|
|
除法(二元) |
a/b |
|
|
|
|
|
模數(二元) |
a%b |
取餘數 |
|
|
|
|
優先級 6 |
|
|
|
左到右 |
|
|
加法(二元) |
a+b |
|
|
|
|
|
減法(二元) |
a-b |
|
|
|
|
|
優先級 7 |
|
|
|
左到右 |
|
|
位元左移(二元) |
a<<b |
|
|
|
|
|
位元右移(二元) |
a>>b |
|
|
|
|
|
優先級 8 |
|
|
|
左到右 |
|
|
小於(二元) |
a<b |
|
|
|
|
|
小於等於(二元) |
a<=b |
|
|
|
|
|
大於(二元) |
a>b |
|
|
|
|
|
大於等於(二元) |
a>=b |
|
|
|
|
|
優先級 9 |
|
|
|
左到右 |
|
|
等於(二元) |
a==b |
|
|
|
|
|
不等於(二元) |
a!=b |
|
|
|
|
|
優先級 10 |
|
|
|
左到右 |
|
|
位元 AND(一元) |
a&b |
|
|
|
|
|
優先級 11 |
|
|
|
左到右 |
|
|
位元 XOR(一元) |
a^b |
|
|
|
|
|
優先級 12 |
|
|
|
左到右 |
|
|
位元 OR(一元) |
`a |
b` |
|
|
|
|
優先級 13 |
|
|
|
左到右 |
|
|
邏輯 AND(二元) |
condition1 && condition2 |
|
|
|
|
|
優先級 14 |
|
|
|
左到右 |
|
|
邏輯 OR(二元) |
`condition1 |
|
condition2` |
|
|
|
優先級 15 |
|
|
|
右至左 |
|
|
條件運算子(三元) |
a?b:c |
相當於 if(a){b}else{c} |
否 |
|
|
|
優先級 16 |
|
|
|
右至左 |
|
|
加法 + 賦值(二元) |
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 |
|
|
|
|
位元 AND + 賦值(二元) |
a&=b |
同 a=a&b |
|
|
|
|
位元 OR + 賦值(二元) |
`a |
=b` |
同`a=a |
b` |
|
|
位元 XOR + 賦值(二元) |
a^=b |
同 a=a^b |
|
|
|
|
位元左移 + 賦值(二元) |
a<<=b |
同 a=a<<b |
|
|
|
|
位元右移 + 賦值(二元) |
a>>=b |
同 a=a>>b |
|
|
|
|
優先級 17 |
|
|
|
右至左 |
|
|
丟擲異常 |
throw |
|
否 |
|
|
|
優先級 18 |
|
|
|
左到右 |
|
|
逗號運算子(二元) |
a,b |
丟棄左值 |
|
|
|
|