close
運算子(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++) … | 由左至右 |
文章標籤
全站熱搜