運算子(operator)就是在做運算時的符號,運算不單單包含數學運算,與變數宣告是相同的,有算數(+-*/)、邏輯(And Or Not)、位元處理(2進位0101)、比較(><==!=)、指派(=)等..,但注意到的是與數學不同的地方,所有變數在左方被右方值指派(assign)(x=2+5),並不會有兩個以上的變數在左邊(2x+5=7或2x+3y=4z+9這種的),且運算子有分優先順序,比方算術運算比邏輯優先(比方2+5==1+6,2+5跟1+6先做才比較)
運算子

  • 算術類
    • +
    • -
    • * 乘
    • / 除
    • % 取餘數
  • 邏輯類
    • && 在邏輯上的且
    • || 邏輯上的或
    • ! 非(NOT)
  • 比較類
    • <
    • == 相等的比較 因為=已經被assign用掉了 所以用兩個=
    • >=
    • <=
    • != 不相等
  • 位元運算
    • >>  右移
    • << 左移
    • & 且
    • | 或
    • ~ 非(NOT)
    • ^ 互斥或XOR
  • 指派
    • = 指派(Assign) 左邊的變數 被設定為右邊的值
    • ++ 變數+1
    • -- 變數-1
    • 運算子加= 即對左方變數做 運算子及運算子後的事 如 a=a*10 > a*=10
      • +=
      • -=
      • *=
      • /=
      • %=
      • &=
      • |=
      • ^=
  • 優先權更改 (括號內的先做) 如果遇到兩層以上 內層先做 如a*(b+(c-a))
    • ( 開始符號
    • ) 結束符號

例子 指派 將後方的值賦予a

int a;
a=1;
a=2;
a=999;//則a最後為999

例子 數學運算+指派

float a;
a=5+1*2/10;
a=a+1;/*這行的意思是 把a的值+1 
        這就是與數學不同的地方
        因為+號運算優先於指派=
        所以a為5.2然後+1指派給
        自己 a就變成6.2*/

例子 運算加上指派的簡寫

int a;
a=1;
a+=1;//這行與上方範例的a=a+1同意思
a*=2;//a=a*2
a/=2;//a=a/2...以此類推

例子 指派++ --

int a;
a=1;
a++;//這與a=a+1 也與 a+=1相同
a--;//這與a=a-1 也與 a-=1相同但沒有乘除其他運算

例子 比較 + 邏輯運算

int a=1,b=1;
int boolean=0;
boolean=a==b;//這時候因為a與b都為1所以比較成立 boolean為1(True成立)
b++;//a=1,b=2;
boolean=a>b;//這時候為0(False不成立)因為a比b小
boolean=(a>b)||(a==b-1)//(a>b或者a=b-1)這時候為1(成立)

以下是運算子列表 取自Wiki

優先級 運算子 敘述 範例 過載性 結合性
1 ++ 字尾遞增 i++   由左至右
-- 字尾遞減 i--  
() 函式呼叫或函式呼叫形式的類型轉換 int x = f();  
[] 陣列存取 array[4] = 2;  
. 以物件方式存取成員 obj.age = 34;
-> 以指標方式存取成員 ptr->age = 34;  
2 ++ 字首遞增 ++i   由右至左
-- 字首遞減 --i  
+ 一元正號 int i = +1;  
- 一元負號 int i = -1;  
!
not
邏輯非
!的備用拼寫
if (!done) …  
~
compl
按位取反
~的備用拼寫
flag1 = ~flag2;  
(type) 強制類型轉換 int i = (int)floatNum;  
* 取指標指向的值 int data = *intPtr;  
& 取變數的位址 int *intPtr = &data;  
sizeof 某某的大小 size_t s = sizeof(int);
3 * 乘法 int i = 2 * 4;   由左至右
/ 除法 float f = 10.0 / 3.0;  
% 模數(取余) int rem = 4 % 3;  
4 + 加法 int i = 2 + 3;  
- 減法 int i = 5 - 1;  
5 << 位元左移 int flags = 33 << 1;  
>> 位元右移 int flags = 33 >> 1;  
6 < 小於關係 if (i < 42) …  
<= 小於等於關係 if (i <= 42) ...  
> 大於關係 if (i > 42) …  
>= 大於等於關係 if (i >= 42) ...  
7 == 等於關係 if (i == 42) ...  
!=
not_eq
不等於關係
!=的備用拼寫
if (i != 42) …  
8 &
bitand
位元 AND
&的備用拼寫
flag1 = flag2 & 42;  
9 ^
xor
位元 XOR(獨占or)
^的備用拼寫
flag1 = flag2 ^ 42;  
10 |
bitor
位元 OR(包含or)
|的備用拼寫
flag1 = flag2 | 42;  
11 &&
and
邏輯 AND
&&的備用拼寫
if (conditionA && conditionB) …  
12 ||
or
邏輯 OR
||的備用拼寫
if (conditionA || conditionB) ...  
13 c?t:f 三元條件運算 int i = a > b ? a : b; 由右至左
14 = 直接賦值 int a = b;  
+= 以和賦值 a += 3;  
-= 以差賦值 b -= 4;  
*= 以乘賦值 a *= 5;  
/= 以除賦值 a /= 2;  
%= 以取餘數賦值 a %= 3;  
<<= 以位元左移賦值 flags <<= 2;  
>>= 以位元右移賦值 flags >>= 2;  
&=
and_eq
以位元AND賦值
&=的備用拼寫
flags &= new_flags;  
^=
xor_eq
以位元XOR賦值
^=的備用拼寫
flags ^= new_flags;  
|=
or_eq
以位元OR賦值
|=的備用拼寫
flags |= new_flags;  
15 throw 丟擲異常 throw EClass("Message");  
16 , 逗號運算子 for (i = 0, j = 0; i < 10; i++, j++) …   由左至右

 

 

arrow
arrow

    繩繩 發表在 痞客邦 留言(0) 人氣()