賦值運算子(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 的條件判斷吧!!!