Skip to main content

2.3 運算子與運算優先順序

在掌握了基本輸入、輸出之後,我們已經具備「將資料讀進電腦」,「將處理後資料送回外界」的能力,接下來重點就是中間的「處理」,也就是運算的部分。

首先我們要認識兩個名詞:

  • 運算元(operands)
  • 運算子(operator)

以 2+3 為例,23 都是運算元,+ 是運算子。

我們可以把運算子想成是「運算符號」,運算元則是「運算的對象」。

指定(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)運算子

&, |, ^, ~, >>, <<

其他的運算子