C++ 快速導覽 - 運算子




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
<<=
>>=
17throw
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 計算出的值。


跟指標有關的運算子


跟指標有關的運算子有 & 及 * ,往後才會陸續介紹。


跟參考有關的運算子


跟參考有關的運算子有 * ,往後才會陸續介紹。


跟結構有關的運算子


跟結構有關的運算子有 -< 及 . ,往後才會陸續介紹。


跟陣列有關的運算子


跟陣列有關的運算子有 [] ,往後才會陸續介紹。


跟物件有關的運算子


跟物件有關的運算子有 . 、 newdelete 、 ->* 及 .* ,往後才會陸續介紹。


拋出例外的運算子


拋出例外的運算子為 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 月更新

沒有留言: