運算子、運算式

2012/10/26 謝碧景(c)編製更新

學習目標

一、運算子(算符 Operator

(一)指定運算子『=』

功能是= 右邊 運算的值指定給左邊的變數,語法如下:右方值可為數值或字串或運算式

變數 = 值 運算式; 例如 b=a+32;

*延伸思考:兩數互換,【參閱:兩數互換圖

(二)算術運算子

  • 一般數學四則運算用的運算子與 ﹪、遞增運算子、遞減運算子。

    • ++ 遞增運算子與 -- 遞減運算子

  1. 前置(prefix):++或--在變數前,表示++或--是先加1或減1後再設定給其他變數。

  2. 後置(postfix):++或--在變數後,表示++或--是先設定給其他變數後再加1或減1。

(三) 複合指定運算子

複合指定運算子是同時執行『算術運算子(+-*/%加減乘除餘)或位元運算子(&|~^ << >>)』及『指定運算子』兩件工作。

◆範例1(檔名:operator-1.cpp)

◆範例1(檔名:operator-1.cpp)

(四)比較關係運算子

比較關係運算子的結果只會傳回真 true(整數1)或假 false(整數0),常搭配 if 條件使用。

(五)邏輯運算子(Logical operator)

且(&&)、或(||)、否(!)三個運算子,運算優先順序為 ! > && > || ;運算式或數值都只有二個值 0(false 假)與 1(true 真)。

  • 真值表:1代表T,0代表F,即通電代表1, 不通電代表0。

(六)位元運算子(Bitwise operator)

1. <<(左移)、>>(右移)、&(AND且)、|(OR或)、^(XOR互斥)、!(NOT)、~(補數)

2. 數字在進行位元運算時,在電腦內部會先將數字轉換為二進位數後,再進行運算。

3. <<(左移)運算:將二進位數的每一個位元向左遞移n位,最左邊的位元遞移後捨去,最右邊的空位補0。

【格式】 數值<<n

範 例

int a=3;

a=a<<1;

cout<<a; //結果a值為6

說 明

整數3的二進位為0000000000000011

所有位元左移1位0000000000000110

還原成十進位為22*1+21*1+20*0=6

4. 就數值計算而言:左移運算是將數值乘上2n即可(n為遞移位數),右移運算是將數值除以2n

5. &(且)、|(或)、!(反)、^(互斥)、~(術)等運算方式:將數值先轉換為二進位後,以位元為單位進行AND、OR、NOT、XOR等運算;補數運算是取二進位數值之1's補數。

(七)三元運算子

三元運算子兩個符號所組成,會條件判斷成立則執行敘述1,否則執行敘述2。三元運算子的運算式結果只能是一個值運算式,無法依據判斷結果執行多列程式碼。

【格式】 (判斷條件)?條件成立 敘述1:條件不成立敘述2;

  • 例1:成績大於等於60則輸出 "及格" 否則輸出 "不及格"

If (score>=60)

cout<<"及格";

else

cout<<"不及格";

以『三元運算子』表示如下:

(score>=60) ? cout<<"及格\n" : cout<<"不及格\n";

  • 例2:

max=a>b ? a : b; //若 a>b 則 max=a 否則 max=b

◆範例2:輸出變數 a 的絕對值。

執行2次結果:

*註:設定欄位寬度

(1)用cout所輸出的數字及字串寬度為欄位寬度,即設定輸出字元個數(寬度),但效用只有一次。可藉由下面方式設定欄位寬度:

  • 方法1:欄位寬度為n位數

【格式】 cout.width(n); //欄位寬度為n位數

  • 方法2:使用 setw(n) //需引入#include <iomanip>

(2)輸出數值如果超出設定之寬度,則以實際寬度輸出。

二、 運算子的優先順序

算術運算子 > 比較運算子 > 邏輯運算子

    • 先乘除,後加減;同一列中運算,其優先順序相同時是由左至右運算。

    • 常見運算子的優先順序:

§實作練習

一、請輸入3個任意數,撰寫程式顯示出 3 數中的最大值。