iT邦幫忙

2021 iThome 鐵人賽

DAY 11
1
Software Development

C 語言的簡單入門系列 第 11

【Day 11】C 語言的賦值運算子

  • 分享至 

  • xImage
  •  

賦值運算子(Assignment operator) : 指的是同時執行「算數運算子或位元運算子」以及「指定運算子」兩件工作。(指定運算子即是"=")

C 語言支持的賦值運算子:

運算子 說明
= 把右邊運算元的值賦給左邊運算元
+= 加且賦值運算子,把左邊運算元加上右邊運算元的結果賦值給左邊運算元
-= 減且賦值運算子,把左邊運算元減去右邊運算元的結果賦值給左邊運算元
*= 乘且賦值運算子,把左邊運算元乘以右邊運算元的結果賦值給左邊運算元
/= 除且賦值運算子,把左邊運算元除以右邊運算元的結果賦值給左邊運算元
%= 取餘數且賦值運算子,求兩個運算元的餘數值賦值給左邊運算元
<<= 左移且賦值運算子
>>= 右移且賦值運算子
&= 做完 & 的位元運算的值賦值給左邊運算元
` =`
^= 做完 ^ 的位元運算的值賦值給左邊運算元

以上表格參考
ITREAD01.COM - C運算子

老樣子,我們上程式碼!!

#include<stdio.h>
int main(){
	int A = 0;
	A += 2;  //A = A + 2
	printf("A = %d\n", A); 
	A <<= 2; //A = A << 2
	printf("A = %d", A);
	return 0; 
}

下面為輸出結果:


程式碼裡面的"A += 2"就是等於A = A + 2的意思,所以第一次輸出 A 會等於 2,而A <<= 2是等於A = A << 2的意思,所以現在 A=2=0010,往左移兩次,得到 1000,也就是 8!

還記得小時候剛學會四則運算,老師總告訴我們"先乘除後加減"嗎?
在 C 的世界裡,運算子的計算也是有順序的!

運算子的優先順序 :

  • 算數運算子 -> 比較運算子 -> 邏輯運算子
    一樣是先乘除、後加減哦!!如果同一列的運算,優先順序相同時,是從左至右運算的!

常見運算子的優先順序:

順序 運算子
1 ( )小括號
2 +(正數)、-(負數)
3 (1) * (2) / (3) %
4 (1) + (2) -
5 (1) < (2) <= (3) > (4) >=
6 (1) = (2) !=
7 &&
8 ||
9 (1) =(assign) (2) *=、/=、%=、+=、-=

為了讓大家更了解,這裡有幾個小問題 :

#include<stdio.h>
int main(){
    int A = 0;
    printf("%d\n", 50 * (++A) / 5 + 2 % 1);
    printf("A = %d", A);
    return 0;
}

請問以上程式碼輸出是甚麼呢?
以下是輸出結果:

上面的程式碼,會先做++A,所以 A=1,然後做(50*1 / 5)+(2 % 1),因為 2 除以 1 的餘數為 0,所以我們只要計算(50*1/5)就好,所以答案等於 10 ~ 你答對了嗎~我們再看一題!

#include<stdio.h>
int main(){
    int A = 0;
    printf("%d\n", (A++) * 999 * 9 + 100 / 2);
    ++A *= 10 + 5;
    printf("A=%d",A);
    return 0;
}

一樣是問上面程式碼的輸出~請思考一下!
思考完,我們就來看結果!

這題有小小的陷阱,看(A++)*999*9 + 100/2會覺得數字怎麼那麼醜,但是(A++)代表了先計算完,A 才會加 1,所以會等於0*999*9+100/2,這樣就會等於 50!
然後,++A *= 10 + 5;的部分是 A 先加 1,會等於 2,然後計算A=A*(10+5),所以最後的結果,A 會等於 30!

好了,我們運算子這個單元已經告一段落了~明天我們來講講 C 的條件判斷吧!!!


上一篇
【Day 10】C 語言的位元運算子
下一篇
【Day 12】C 語言的 if 條件判斷(上)
系列文
C 語言的簡單入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言