C - 運算子:進入程式設計魔法的門戶

你好,未來的編碼巫師!? 我很高興能成為你在C語言程式設計世界的冒險引路人。今天,我們將要探索C語言中運算子的神奇領域。如果你從未寫過一行程式碼,也別擔心——我們將從最基本的知識開始,並一起逐步學習。

C - Operators

算術運算子:基本咒語

讓我們從我們程式設計咒語書中最簡單的咒語開始——算術運算子。這些是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語言中還有一些我們尚未涵蓋的運算子:

  1. 複合運算子 (,): 它允許你在只需要一個表達式的情況下使用多個表達式。
  2. 地址運算子 (&): 它返回變量的內存地址。
  3. 解引用運算子 (*): 它訪問特定內存地址的值。
  4. 結構成員運算子 (.): 它訪問結構的成員。
  5. 結構指針運算子 (->): 它通過指針訪問結構的成員。

我們將在未來的課程中詳細探討指針和結構。

現在,你就擁有了它,我的年輕編碼學徒!我們已經穿越了C運算子的土地,從簡單的算術咒語到複雜的位運算符咒。記住,練習是完美的關鍵,所以不要害怕在您自己的代碼中實驗這些運算子。快樂編碼,願位元永遠站在你這一邊!?‍♂️?

Credits: Image by storyset