匯東網


C 語言:一行代碼實現變量值交換的原理

[編輯] [转简体]
|
作者:huidong | 分類:【編程】C/C++
[ 18 瀏覽 0 評論 4 贊 4 踩 ]

概要
a^=b^=a^=b;

正文

要理解這個交換方法,首先需要理解異或運算的意義,首先來看異或的真值表:

A     B     A xor B
0     0     0
0     1     1
1     0     1
1     1     0

所以,異或可以有兩種解讀。如果我們假設 c = a ^ b,那麼:

解讀一c 中的每一位表示 a, b 的相應位是否不同。不同爲 1,相同爲 0。

解讀二:在 a xor b 中,對於 b 的每一位,爲 1 表示 a 的這一位需要取反,爲 0 表示保持原狀,然後將運算結果保存到 c。(a, b 的意義可以反過來)


因此,我們首先將 a^=b^=a^=b 拆分開,就是:

a^=b;    // a 的意義變爲:a, b 中每一位是否不同。

b^=a;    // 以這時的 a 作爲取反標準,對於每一位,如果 a 標記爲 1(即 a, b 初始值在這一位不同),就對 b 這一位取反,即變成了 a 這一位的初始值。

a^=b;    // 此時的 b 已經變成了 a 的初始值,a 再與 b 異或,就可以和上面的原理一樣得到 b 了。


再把三行代碼縮爲一行,就是:

a^=b^=a^=b;


[ 4] [ 4]


 評論區  0 條評論

+ 添加評論