2.3 運算子與運算優先順序
在掌握了基本輸入、輸出之後,我們已經具備「將資料讀進電腦」,「將處理後資料送回外界」的能力,接下來重點就是中間的「處理」,也就是運算的部分。
首先我們要認識兩個名詞:
- 運算元(operands)
- 運算子(operator)
以 2+3 為例,2 和 3 都是運算元,+ 是運算子。
我們可以把運算子想成是「運算符號」,運算元則是「運算的對象」。
指定(assign)運算子
在 C++ 中,= 不是 等於(equal) 而是 指定(assign)
a = 3 是「把 3 指定 給 a 這個變數」,而非表示「a 和 3 的值是相等的」
執行完這行後,變數 a 的值就會變成 3。
a = 3;
cout << a; // 3
運算子 = 會將其右側的運算結果,指定到左側的儲存空間。
例如 v = 3+5 是把 3+5 的運算結果指定給變數 v。
也就是說如果 = 的右側不是單純的值而是運算式,要先完成運算後,再將運算結果指定給其左側的變數。
所以,執行完這行後,變數 v 的值就會變成 8。
v = 3+5;
cout << v; // 8
想想看,以下這段程式執行後的輸出為何?
int a;
a = 3;
a = a + 2;
cout << a << endl;
其中第 2 行是把 3 指定給 a,所以執行後 a 的值為 3。
第 3 行因為 = 的右側是運算式 a + 2,因此要先完成這個運算,目前 a 的值是 3,所以 a+2 的運算結果是 5。
接著可以想像第3行變成 a = 5,所以整行執行後,a 的值為 5。
千萬不要用數學符號的角度把 = 當成「等於」去看待 a = a + 2,這行敘述,否則你會看不懂它。
練習
以下這段程式執行後,a 和 b 的值各為何?
int a = 3;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
算術(arithmetic)運算子
「乘、除」 運算子的優先權高於「加法、減法、」運算子,也就是在運算時會 先乘法除後加減。
例如:1+2*3-4; 的運算結果是 3。
和數學運算式一樣,可以加上括號指定優先運算的部分。
例如:(1+2)*(3-4); 的運算結果是 -3。
有個需要留意的地方是,不同於我們在數學課中用小括號、中括號、大括號來一層層的指定優先運算的層次。C++-裡只有小括號,不管是幾層都是用小括號來表示。中括號、大括號這兩個符號是用在其他地方。
數學課裡的 $(1+2)x[(3-4)+2]$
(1+2)*((3-4)+2)
整數除法
/
取餘數
%
關係(Relational)運算子
==, !=, >, <, >=, <=
邏輯(logical)運算子
&&, ||, !
位元(bitwise)運算子
&, |, ^, ~, >>, <<