記憶體中的變數
當我們宣告了一個int
整數的變數x
並賦值為38,那它在記體中的樣子如下圖所示:

- 上圖是假設整數變數
x
是儲存於記憶體位址中的0x7ffda99fcbdc-0x7ffda99fcbdf - 總共32位元bits(
4Bytes
),符合我們的認知。 - 10進位的數值會被轉換為電腦看得懂的2進位表示法。
運算子
指定運算子
作用:用於將值指定給變數。- 常見運算子:
=
,+=
,=
,=
,/=
,%=
- 範例:
int a = 10; // 將 10 指定給 a
a += 5; // 相當於 a = a + 5 (結果: 15)
算數運算子
- 作用:進行基本的數學運算。
- 常見運算子:
+
,-
,*
,/
,%
- 範例:
int a = 10, b = 3;
int sum = a + b; // 加法 (結果: 13)
int mod = a % b; // 取餘數 (結果: 1)
遞增(減)運算子
- 作用:使變數自增或自減 1。
- 運算子:
++
(遞增),--
(遞減) - 範例:
c
int n=0, a = 5;
n = (a++) + 10; // 後置遞增,會先計算a + 10, 再計算a = a + 1(結果: n=15, a=6)
n = (++a) + 10; // 前置遞增,會先計算a = a + 1, 再計算a + 10(結果: a=7, n=17)
關係運算子
- 作用:比較兩個值,結果為布林值(
true
或false
)。 - 常見運算子:
==
,!=
,<
,>
,<=
,>=
- 範例:
int a = 5, b = 10;
if (a < b) { // 比較 (結果: true)
printf("a 小於 b\n");
}
邏輯運算子
- 作用:進行邏輯運算,返回布林值。
- 常見運算子:
&&
(AND),||
(OR),!
(NOT) - 範例:
int a = 5, b = 10;
if (a > 0 && b > 0) { // AND 運算 (結果: true && true = true)
printf("a 和 b 都是正數\n");
}
位元運算子
- 作用:對數值的二進制位元逐一進行位元運算。
- 常見運算子:
&
(AND),|
(OR),^
(XOR),~
(NOT),<<
(左移),>>
(右移) - 範例:
int a = 8, b = 2, c=0;
//把a的位元右移b個位元,並將移出的位元捨棄,空缺則補0,相當於a / 2的b次方, 結果為00000000 00000000 00000000 00000010,c=2
c = a>>b;
//把a的位元左移b個位元,並將移出的位元捨棄,空缺則補0,相當於a * 2的b次方, 結果為00000000 00000000 00000000 00100000,c=32
c = a<<b;
c = ~a; //把a的每一位元NOT,即將0變為1,1變為0,結果為11111111 11111111 11111111 11110111,最高位為負號,表示負數,我們對結果取2的補數就可以得到這個負數的數值,我們得到-(00000000 00000000 00000000 00001000+1),c=-9
c = a&b; //結果為: 00000000 00000000 00000000 00000000,c = 0
c = a|b; //結果為:00000000 00000000 00000000 00001010,c = 10
c = a^b; //結果為:00000000 00000000 00000000 00001010,c = 10
練習題
char x = 3;
x = ~x;
(a)//x取反向: 11111100
(b)//取2的補數: 得到-(00000100)
(c)//x = -4
char x = -3;
x = x >> 1;
(a)//-3以2的補數表示為11111101(00000011反相+1)
(b)//右移後得到11111110(注意,因為最高位為負號,這邊我們不補0,要補1)
(c)//取2的補數,得到-(00000010)
(d)//x = -2
條件運算子
- 作用:根據條件選擇一個值(三元運算子)。
- 格式:
條件 ? 真值 : 假值
- 範例:
int a = 5, b = 10;
int max = (a > b) ? a : b; // 若條件為真返回 a,否則返回 b (結果: max=10)
運算子的優先順序
在程式碼中,優先級較高,意味著它們會先被執行。


一樣不用死記硬背,但有時候優先級的高低可能會影響輸出結果,所以大概了解一些優先級大概在哪還是有其必要性,不過忘記回來查就好了。