1. 導言
C語言中的位元運算概述
C語言為了有效處理記憶體與處理器,提供了位元運算。其中最重要的就是「XOR(互斥或)」運算。位元運算通常應用於資料加密、驗證、數值操作等多種場合。XOR的特性是:當兩個位元不同時回傳「1」,相同時則回傳「0」,因此成為簡單且強大的運算工具。
本文將從C語言中XOR運算的基礎到應用進行說明,並搭配實際程式碼範例,讓初學者也能輕鬆理解。
2. XOR運算子的基本原理
什麼是XOR?
XOR(互斥或)是針對每一位元進行比較,若兩個位元不同則回傳「1」,相同則回傳「0」。例如,將數值5與9進行位元比較,可以得到以下結果:
- 5的二進位:
0101
- 9的二進位:
1001
以XOR運算比較這些位元,結果如下:
位元位置 | 5 (0101) | 9 (1001) | XOR結果 |
---|---|---|---|
1 | 0 | 1 | 1 |
2 | 1 | 0 | 1 |
3 | 0 | 0 | 0 |
4 | 1 | 1 | 0 |
結果為 1100
,也就是十進位的「12」。只要理解了XOR運算的基本原理,就能進一步應用於更複雜的位元運算。
3. 以範例程式理解XOR
基本XOR用法範例
以下是在C語言中執行XOR運算的簡單範例。這段程式碼將對數值5與9進行XOR運算,並顯示結果。
#include <stdio.h>
int main() {
int a = 5;
int b = 9;
int result = a ^ b;
printf("5 XOR 9 = %d\n", result); // 結果為12
return 0;
}
上述程式碼計算變數 a
與 b
的XOR結果,並將結果存入 result
。執行後會顯示「5 XOR 9 = 12」,是理解位元運算的良好入門例子。
4. XOR的應用範例
利用XOR交換變數值
利用XOR的特性,可以不使用暫存變數就交換兩個變數的值。以下是使用XOR交換 a
與 b
的程式碼:
#include <stdio.h>
int main() {
int a = 5;
int b = 7;
printf("交換前: a = %d, b = %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交換後: a = %d, b = %d\n", a, b);
return 0;
}
這段程式碼利用XOR三次運算,輕鬆完成 a
與 b
的值交換,無需額外暫存變數,有助於節省記憶體資源。

5. 實務範例與應用範圍
偵測陣列中重複或奇數次出現的數字
XOR還可以高效率地找出陣列中重複或奇數次出現的元素。以下分別為偵測重複元素和奇數次出現元素的程式碼範例。
找出重複的數字
#include <stdio.h>
int findDuplicate(int nums[], int size) {
int duplicate = 0;
for (int i = 0; i < size; i++) {
duplicate ^= nums[i];
}
return duplicate;
}
int main() {
int nums[] = {1, 2, 3, 2, 4};
int size = sizeof(nums) / sizeof(nums[0]);
printf("重複的數字是: %d\n", findDuplicate(nums, size));
return 0;
}
這段程式碼利用XOR將所有數字進行運算,重複出現的數字會被消去,最後剩下的就是重複元素。
偵測奇數次出現的數字
#include <stdio.h>
int findOddOccurrence(int nums[], int size) {
int result = 0;
for (int i = 0; i < size; i++) {
result ^= nums[i];
}
return result;
}
int main() {
int nums[] = {5, 3, 9, 3, 5, 9, 7};
int size = sizeof(nums) / sizeof(nums[0]);
printf("奇數次出現的數字是: %d\n", findOddOccurrence(nums, size));
return 0;
}
利用XOR特性,最終僅剩下奇數次出現的數字,因此能快速檢出該元素。
XOR在資料加密中的應用
XOR同樣常用於資料加密。以下為簡單XOR加密與解密的程式碼範例:
#include <stdio.h>
void encryptDecrypt(char data[], char key) {
for (int i = 0; data[i] != '\0'; i++) {
data[i] = data[i] ^ key;
}
}
int main() {
char data[] = "Hello World";
char key = 'K';
printf("原始資料: %s\n", data);
encryptDecrypt(data, key);
printf("加密後: %s\n", data);
encryptDecrypt(data, key);
printf("解密後: %s\n", data);
return 0;
}
此程式碼對字串每個字元進行XOR處理,實現加密與解密。再度XOR即可還原原本資料,因此XOR成為基礎加密技術之一。
6. 結語
本文從C語言中XOR運算的基本用法到應用範例進行了說明。XOR廣泛應用於資料加密、錯誤檢查、程式優化、雜湊函數設計等各種領域。特別因其速度快、效率高,在大數據處理或高效能應用中扮演重要角色。
希望透過本文,您能理解XOR運算的強大用途,並活用於未來的程式設計實務。