歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年3月24日 星期一

[ ^ XOR ]邏輯位元運算 In C

想像一下,如果你有AB兩個杯子,裝這不同液體,如何將兩個杯子中的液體互換.
方法一:準備另一個杯子C,將倒進C空杯,再將B倒進A空杯,最後將C倒進B空杯,完工.
這方法很理所當然,也沒錯,在寫程式過程中經常會用到的方法.
範例 :
int A=3,B=4;
int C;
   C=A;  //將A倒進C
   A=B;  //將B倒進A
   B=C;  //將C倒進B

但是你嘗試過這樣的方法嗎?
方法二:將A的液體潑向空中,然後將B倒進A空杯,然後用B空杯接下空中的液體,收工.
這個方法,常理來說太可能(有點像武俠小說),但邏輯上是OK的,話說回來,萬一你手上沒有多餘的杯子,你也非得這樣做不可.
範例 :
int A=3,B=4;
   A=A^B;  //將A潑向空中
   B=B^A;  //將B倒進A
   A=A^B;  //將B接下剛剛在空中的液體A

可以在你的TurboC中試試看...保證成功.
看看[ ^ XOR](中文叫它[互斥或])真值表

由上表可知,[1^1=0][0^0=0][1^0=1][0^1=1]
所以
A = A(3) ^ B(4) = (011)^(100) = 111 = 7
B = B(4) ^ A(7) = (100)^(111) = 011 = 3
A = A(7) ^ B(3) = (111)^(011) = 100 = 4
不只這樣喔,因為所有的CPU都會實作XOR電路,所以方法2的執行速度,會比方法一快一點喔...

0 個回應:

MSN狀態(我在線上時,可以跟我交談喔)