C語言XOR運算教學:原理、範例與實用應用全解析

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結果
1011
2101
3000
4110

結果為 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;
}

上述程式碼計算變數 ab 的XOR結果,並將結果存入 result。執行後會顯示「5 XOR 9 = 12」,是理解位元運算的良好入門例子。

4. XOR的應用範例

利用XOR交換變數值

利用XOR的特性,可以不使用暫存變數就交換兩個變數的值。以下是使用XOR交換 ab 的程式碼:

#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三次運算,輕鬆完成 ab 的值交換,無需額外暫存變數,有助於節省記憶體資源。

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運算的強大用途,並活用於未來的程式設計實務。

侍エンジニア塾