C/C++‎ > ‎

運算子、運算式

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

 學習目標:

  • 瞭解指定運算子、算術運算子、比較運算子、邏輯運算子、及複合指定運算子的意義與運用。
  • 瞭解運算子的優先順序:算術運算子>比較運算子>邏輯運算子。
  • 學會變數搭配運算子構成運算式或條件式之程式設計與應用。

一、運算子(算符 Operator

(一)指定運算子『=

功能 = 右邊 運算的值指定給左邊的變數,語法如下:右方值可為數值或字串或運算式。
 變數=值;         例如      b=a+32;

(二)算術運算子

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

運算子

說明

範例

執行結果(若a=13,b=5

+

加,兩運算元相加

 a+b

18

-

減,兩運算元相減

 a-b

8

*

乘,兩運算元相乘

 a*b

65

/

除,兩運算元相除

 a/b

2

%

餘,取兩整數相除後的餘數(整數)。

 a%b

3
a除以b的餘數(ab運算元必須為整數,相當於basic語言之MOD

  ++

運算元遞增

(遞增運算子)

 int a=2;

 a++;

3

  --

運算元遞減

(遞減運算子)

 int a=2;

 a--;

1

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

算符

功能

範例

執行結果

++

遞增:將變數值加1

++aa++相當於a=a+1a的值加1

a=3;

a++;(++a;)

b=a*2;

a=3

相當a=a+1 a=3+1 a=4

b=4*2 b=8

--

遞減:將變數值減1

--aa--相當於a=a-1a的值減1

a=3;

a--;(--a;)

b=a*2;

a=3

相當a=a-1 a=3-1 a=2

b=2*2 b=4

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

 

範例

執行結果

前置

a=2;

b=++a;

a=3  b=3

a值先加1之後再設定給b

後置

a=2;

b=a++;

a=3  b=2

a值先設定給b之後a值加1

前置

a=2;

b=--a;

a=1  b=1

a值先減1之後再設定給b

後置

a=2;

b=a--;

a=1  b=2

a值先設定給b之後a值減1


(三) 複合指定運算子

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

運算子

範例

相同於

+=

a+=b;

a=a+b;

-=

a-=b;

a=a-b;

*=

a*=b;

a=a*b;

/=

a/=b;

a=a/b;

%=

a%=b;

a=a%b;

 變數++

a++;

a+=2;

a=a+1;

a=a+2;


 範例1

#include <iostream>

using namespace std;

int main()

{

    int a=51,b=23;

    cout<<"原始的 a="<<a<<"\t b="<<b<<endl;

    a+=b;

    cout<<"a+=b a="<<a<<"\t b="<<b<<endl;

    system("PAUSE");

    return 0;

} 
執行結果  


(四)比較運算子

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

執行優先順序

關係運算子

說明

範例

1

<

小於

a<b

>

大於

a>b

<=

小於等於

a<=b

>=

大於等於

a>=b

2

==

等於

a==b

!=

不等於

a!=b

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

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


關係運算子

說明

範例

成績在0~100為正確

&&

(a>=0 && a<=100)

-------0---------正確成績-----------100-------

||

(a<0 || a>100)


  • 真值表1代表T0代表F,即通電代表1, 不通電代表0
    參閱:0與1學問大

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

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

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

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


【格式】  數值<<n


 

 

a=3;

a=a<<1;

結果a值為6

整數3的二進位為0000000000000011

所有位元左移10000000000000110

還原成十進位為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 的絕對值。

 
執行結果1 執行結果2
 


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

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


 例如:  cout.width(5);
           cout<<"123"<<endl;
           cout<<12345<<endl;    

 結果如下:寬度為5 
    1  2  3
 1  4  5

 相同於: 
 #include <iostream>
 #include <iomanip>
 using namespace std;
 int main()
 {
      cout<<setw(5)<<right<<"123"<<endl;    //使用setw(n) 需引入#include <iomanip>   
      cout<<12345<<endl;
      system("PAUSE");
      return 0;
 }

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

 例如:  cout.width(3);
            cout<<1234567; 

 結果如下:寬度為7
1


二、 運算子的優先順序 算術運算子 > 比較運算子 > 邏輯運算子 

  • 先乘除,後加減;同一列中運算,其優先順序相同時是由左至右運算。
  • 常見運算子的優先順序:
 順序 運算子 順序 運算子
 1 () 小括號 7 & (位元 AND)
 2 + (正數)、- (負數) 8 ^ (位元 XOR) 
 3 * (乘)、/ (除)、% (餘數)9 | (位元 OR)
 4 + (加) 、- (減)10 && (邏輯 AND)
 5 <、<=、>、>= 11  ||  (邏輯 OR)
 6 == (相等)、!= (不相等) 12 = (指定)、*=(複合指定)、/=、%=、+=、-=、?: (條件)

§實作練習

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