C - 運算子:進入程式設計魔法的門戶
你好,未來的編碼巫師!? 我很高興能成為你在C語言程式設計世界的冒險引路人。今天,我們將要探索C語言中運算子的神奇領域。如果你從未寫過一行程式碼,也別擔心——我們將從最基本的知識開始,並一起逐步學習。
算術運算子:基本咒語
讓我們從我們程式設計咒語書中最簡單的咒語開始——算術運算子。這些是C語言中大多數計算的基本構建塊。
算術的神奇五人組
以下是五個基本的算術運算子:
運算子 | 名稱 | 示例 |
---|---|---|
+ | 加法 | 5 + 3 = 8 |
- | 減法 | 7 - 2 = 5 |
* | 乘法 | 4 * 6 = 24 |
/ | 除法 | 10 / 2 = 5 |
% | 餘數(模數) | 7 % 3 = 1 |
讓我們看看這些運算子的實際操作:
#include <stdio.h>
int main() {
int a = 10, b = 3;
printf("加法: %d\n", a + b);
printf("減法: %d\n", a - b);
printf("乘法: %d\n", a * b);
printf("除法: %d\n", a / b);
printf("模數: %d\n", a % b);
return 0;
}
當你運行這段代碼時,你將會看到:
加法: 13
減法: 7
乘法: 30
除法: 3
模數: 1
注意到除法給我們的是3而不是3.33嗎?那是因為當我們在C語言中進行整數除法時,我們得到的是一個整數結果。模數運算子(%)給我們的是除法後的餘數。
關係運算子:比較苹果和橙子
現在我們能進行基本數學計算,讓我們學習如何比較事物。關係運算子就像才藝比賽中的裁判——它們比較兩個值並告訴我們它們之間的關係。
以下是我們的關係運算子列表:
運算子 | �意義 | 示例 |
---|---|---|
== | 等於 | 5 == 5 是真 |
!= | 不等於 | 5 != 3 是真 |
> | 大於 | 7 > 3 是真 |
< | 小於 | 2 < 8 是真 |
>= | 大於或等於 | 5 >= 5 是真 |
<= | 小於或等於 | 4 <= 4 是真 |
讓我們來使用這些運算子:
#include <stdio.h>
int main() {
int x = 5, y = 8;
printf("x == y: %d\n", x == y);
printf("x != y: %d\n", x != y);
printf("x > y: %d\n", x > y);
printf("x < y: %d\n", x < y);
printf("x >= y: %d\n", x >= y);
printf("x <= y: %d\n", x <= y);
return 0;
}
這將會輸出:
x == y: 0
x != y: 1
x > y: 0
x < y: 1
x >= y: 0
x <= y: 1
在C語言中,0表示假,任何非零值(通常是1)表示真。所以,我們可以看到5確實不等於8,並且它小於8。
邏輯運算子:決策者
邏輯運算子就像我們程式設計村莊中的智者。它們幫助我們通過結合更簡單的條件來做出複雜的決策。
以下是我們的邏輯運算子:
運算子 | 意義 | 示例 |
---|---|---|
&& | 並且 | (5 > 3) && (4 < 7) 是真 |
|| | 或 | (5 > 8) || (4 < 7) 是真 |
! | 否定 | !(5 > 8) 是真 |
讓我們看看這些運算子是如何工作的:
#include <stdio.h>
int main() {
int a = 5, b = 3, c = 8;
printf("(a > b) && (c > a): %d\n", (a > b) && (c > a));
printf("(a > b) || (a > c): %d\n", (a > b) || (a > c));
printf("!(a > b): %d\n", !(a > b));
return 0;
}
這將會輸出:
(a > b) && (c > a): 1
(a > b) || (a > c): 1
!(a > b): 0
並運算子(&&)只有當兩個條件都為真時才返回真。或運算子(||)只要至少有一個條件為真就返回真。非運算子(!)則翻轉真值。
位運算子:二進位魔術師
現在我們要進入二進位魔術的領域。位運算子直接對數字的二進位表示形式進行操作。它們就像程式設計世界中的顯微鏡,讓我們能夠看到並操作單個位元。
以下是我們的位運算子:
運算子 | 名稱 | 示例 |
---|---|---|
& | 位元並 | 5 & 3 = 1 |
| | 位元或 | 5 | 3 = 7 |
^ | 位元異或 | 5 ^ 3 = 6 |
~ | 位元非 | ~5 = -6 |
<< | 左移 | 5 << 1 = 10 |
>> | 右移 | 5 >> 1 = 2 |
讓我們看看這些運算子的實際操作:
#include <stdio.h>
int main() {
unsigned int a = 5, b = 3; // 5是二進位的101,3是011
printf("a & b = %u\n", a & b); // 101 & 011 = 001
printf("a | b = %u\n", a | b); // 101 | 011 = 111
printf("a ^ b = %u\n", a ^ b); // 101 ^ 011 = 110
printf("~a = %d\n", ~a); // ~101 = ...11111010 (二's補數)
printf("a << 1 = %u\n", a << 1); // 101變成1010
printf("a >> 1 = %u\n", a >> 1); // 101變成10
return 0;
}
這將會輸出:
a & b = 1
a | b = 7
a ^ b = 6
~a = -6
a << 1 = 10
a >> 1 = 2
這些運算子在您進行低階程式設計或需要優化代碼時特別有用。
賦值運算子:值變更者
賦值運算子就像我們程式設計世界中的文書。它們寫入(或賦值)變數的值。讓我們來認識我們的賦值運算子:
運算子 | 示例 | 相當於 |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 2 | x = x - 2 |
*= | x *= 4 | x = x * 4 |
/= | x /= 2 | x = x / 2 |
%= | x %= 3 | x = x % 3 |
<<= | x <<= 2 | x = x << 2 |
>>= | x >>= 1 | x = x >> 1 |
&= | x &= 3 | x = x & 3 |
^= | x ^= 5 | x = x ^ 5 |
|= | x |= 3 | x = x | 3 |
以下是一個簡單的例子:
#include <stdio.h>
int main() {
int x = 10;
x += 5; // x現在是15
printf("After x += 5: %d\n", x);
x *= 2; // x現在是30
printf("After x *= 2: %d\n", x);
x %= 7; // x現在是2 (30 % 7 = 2)
printf("After x %%= 7: %d\n", x);
return 0;
}
這將會輸出:
After x += 5: 15
After x *= 2: 30
After x %= 7: 2
這些運算子是縮寫,它們讓我們的代碼更簡潔,並且通常更易讀。
其他運算子:隱藏的寶石
C語言中還有一些我們尚未涵蓋的運算子:
- 複合運算子 (,): 它允許你在只需要一個表達式的情況下使用多個表達式。
- 地址運算子 (&): 它返回變量的內存地址。
- 解引用運算子 (*): 它訪問特定內存地址的值。
- 結構成員運算子 (.): 它訪問結構的成員。
- 結構指針運算子 (->): 它通過指針訪問結構的成員。
我們將在未來的課程中詳細探討指針和結構。
現在,你就擁有了它,我的年輕編碼學徒!我們已經穿越了C運算子的土地,從簡單的算術咒語到複雜的位運算符咒。記住,練習是完美的關鍵,所以不要害怕在您自己的代碼中實驗這些運算子。快樂編碼,願位元永遠站在你這一邊!?♂️?
Credits: Image by storyset