close



使用
int x = 10;

int y = 20;

以上兩個變數,

要如何不使用第三個變數將x與y的值互換,

即輸出結果為
x = 20,y = 10。

簡單的方法:
x = x+y;
y = x-y;
x = x-y;

可縮寫為:
x=x+y-(y=x);

用XOR的方法:
x = x ^ y;
y = x ^ y;
x = x ^ y;

可縮寫為:
x = (x = x ^ y) ^ (y = x ^ y);


XOR 的原理

語法
result = expression1 ^ expression2

Xor 運算子的語法具有以下幾個單元:

單元說明
result任意的數字變數。
expression1任意的運算式。
expression2任意的運算式。


如果運算式中只有一個的結果是 True,則 result 是 True。
然而,若運算式中有一個是 Null,則 result 也將會是 Null。
當兩個運算式都不是 Null,
 result 將根據下表來決定:

如果 expression1 為且 expression2 為則 result 為
TrueTrueFalse
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

Xor 可同時執行邏輯與位元運算子的運算。
兩運算式的位元比對會如下表所示,以"互斥-或"的邏輯來得到結果:

如果 expression1 為且 expression2 為則 result 為
000
011
101
110


^ 運算子會強制轉型以配合資料型別。
然後 ^ 運算子會檢查以二進位表示的兩個運算式值在兩運算式上執行位元互斥 OR 運算。
運算式資料型別決定此運算子傳回的資料型別。

     0101   (expression1)
^   1100   (expression2)
-----------------
    1001   (result)

二進位XOR快速記法:
    相同為0
    不同為1


其它網站參考:
http://msdn.microsoft.com/zh-tw/library/y2hf3412(v=vs.80).aspx






arrow
arrow

    PG Levin Li 發表在 痞客邦 留言(0) 人氣()