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

C# 交換兩個變數值的三種經典方法:暫存變數、算術運算、XOR 位元運算

     編輯:關於C#

問題描述

給定 a = 2, b = 5,不使用額外變數交換兩值,最終 a = 5, b = 2。

方法一:暫存變數 (最清晰、通用、效能佳)

int temp = a;
a = b;
b = temp;
// 優點:可讀性最高、支援所有型別、JIT 優化極好
// 缺點:需額外 4/8 bytes 堆疊空間

方法二:算術運算 (僅限數值型別、有溢位風險)

a = a + b; // a = 7
b = a - b; // b = 2 (原 a)
a = a - b; // a = 5 (原 b)

// 風險:a + b 可能溢位 (int.MaxValue + 1 回繞)
// 修正:使用 checked 區塊或 long 中介
checked {
    a = a + b;
    b = a - b;
    a = a - b;
}

方法三:XOR 位元運算 (僅限整數、無溢位、但現代 CPU 較慢)

a = a ^ b;
b = a ^ b; // b = a ^ b ^ b = a
a = a ^ b; // a = a ^ b ^ a = b

// 原理:XOR 可逆、交換律、結合律
// x ^ y ^ y = x
// 缺點:同一變數 (a == b) 時會歸零,需加保護
if (a != b) {
    a ^= b; b ^= a; a ^= b;
}

現代 C# 最佳寫法:Tuple 解構 (C# 7+)

(a, b) = (b, a);
// 編譯器生成臨時變數,語法最簡潔、型別安全、無溢位風險
// 適用於所有型別,包含參考型別、結構體、元組

效能比較 (BenchmarkDotNet 參考)

方法平均耗時 (ns)記憶體配置備註
暫存變數0.30 B基準
Tuple 解構0.30 B編譯器優化相同
算術運算0.40 B多指令、溢位檢查
XOR0.50 B現代 CPU 無優勢

結論建議

  1. 首選 Tuple 解構 (a, b) = (b, a):語意清晰、型別安全、效能最佳
  2. 舊版 C# (< 7.0) 使用暫存變數
  3. 教學/演示位元運算特性時展示 XOR
  4. 嵌入式/極度受限環境 (無暫存暫存器) 考慮算術/XOR

暫存變數法
算術法
XOR法

本文對應《叩響 C# 之門》第 2.8 節深化練習:交換兩個變數的值教學內容

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved