首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言交換兩數的五種經典實作與效能比較

     編輯:關於C語言

C 語言交換兩數的五種經典實作與效能比較

交換兩個變數值是程式設計入門的經典問題。C 語言提供多種實作方式,各有優缺點。

1. 使用暫存變數(最直觀、最安全)

int a = 10, b = 20, temp;
temp = a;
a = b;
b = temp;

封裝為函數時需傳址:

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

2. XOR 位元運算(無需暫存變數)

a = a ^ b;
b = a ^ b; // 此時 b = a
a = a ^ b; // 此時 a = 原 b

優點:不佔額外記憶體。缺點:現代編譯器優化下效能不一定更好;若 a 與 b 指向同一記憶體位址會歸零。

3. 加減法(無需暫存變數,但有溢位風險)

a = a + b;
b = a - b;
a = a - b;

缺點:整數相加可能溢位導致未定義行為,不推薦用於生產環境。

4. 使用標準庫 stdlib.h 的 swap 巨集(C11 _Generic)

C11 可利用 _Generic 實作型別通用的 swap 巨集,但較少見。

5. C++ std::swap(C++ 專用,支援移動語意)

#include <utility>
std::swap(a, b);

效能與建議

  • 現代編譯器(GCC/Clang/MSVC -O2/-O3)對暫存變數法優化極好,常產生與 XOR 相同甚至更優的組合語言(如 xchg 指令)。
  • 可讀性最高、無副作用的是暫存變數法,推薦作為預設選擇。
  • 嵌入式系統極度受限記憶體時,可考慮 XOR,但需確保兩變數不重疊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved