運算子、運算式
2012/10/26 謝碧景(c)編製更新
學習目標
一、運算子(算符 Operator)
變數 = 值 或 運算式; 例如 b=a+32;
(二)算術運算子
一般數學四則運算用的運算子與 ﹪、遞增運算子、遞減運算子。
++ 遞增運算子與 -- 遞減運算子
前置(prefix):++或--在變數前,表示++或--是先加1或減1後再設定給其他變數。
後置(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。
參閱:0與1學問大
(六)位元運算子(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 數中的最大值。