首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言異或運算符 (^) 交換兩變數值原理:不需暫存變數

     編輯:程式設計疑難解答

代碼片段

a = a ^ b;
b = a ^ b;
a = a ^ b;
// 完成 a、b 值交換

異或 (XOR) 真值表

ABA ^ B
000
011
101
110

規律:**相同為 0,不同為 1**。

交換過程推演 (以 a=5 (101), b=3 (011) 為例)

  1. a = a ^ b → a = 101 ^ 011 = 110 (6)
    當前:a=6, b=3
  2. b = a ^ b → b = 110 ^ 011 = 101 (5)
    當前:a=6, b=5 (b 已得原 a 值)
  3. a = a ^ b → a = 110 ^ 101 = 011 (3)
    當前:a=3, b=5 (a 得原 b 值,**交換完成**)

數學證明

設 a0, b0 為初始值。
a1 = a0 ^ b0
b1 = a1 ^ b0 = (a0 ^ b0) ^ b0 = a0 ^ (b0 ^ b0) = a0 ^ 0 = a0  ✓
a2 = a1 ^ b1 = (a0 ^ b0) ^ a0 = (a0 ^ a0) ^ b0 = 0 ^ b0 = b0  ✓

利用異或**結合律**、**交換律**、**自反性 (x^x=0)**、**單位元 (x^0=x)**。

適用條件與風險

  • **僅適用於整數型別** (int、long、char 等)。
  • **a、b 必須為不同變數** (同一變數異或自己結果為 0,導致數據丟失)。
  • 現代編譯器優化下,temp=a; a=b; b=temp; 效能相同且可讀性更高,**生產代碼建議用暫存變數**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved