今天復(fù)習(xí)C語(yǔ)言的時(shí)候,看到位運(yùn)算這章。記得以前學(xué)習(xí)C語(yǔ)言的時(shí)候,都沒(méi)怎么關(guān)注這一章。只是記得幾個(gè)位運(yùn)算符,&:按位與,|:按位或,^:按位異或,~:取反,<<:左移,>>:右移,知道其中的含義罷了。不過(guò)當(dāng)看完這一章,確實(shí)是受益匪淺。尤其是利用”異或“運(yùn)算,實(shí)現(xiàn)交換兩個(gè)值,而不用臨時(shí)變量。 通常我們交換兩個(gè)值,都是用一個(gè)臨時(shí)的變量temp,拿交換a,b的值為例,通常的做法是:temp = a;a = b;b = temp;不過(guò)利用位運(yùn)算,真的是方便很多: 假如 a = 3,b = 4。想將a和b的值互換,可以用一下賦值語(yǔ)句實(shí)現(xiàn): a = a ^ b; b = b ^ a; a = a ^ b; 下面用豎式進(jìn)行簡(jiǎn)單說(shuō)明:(10進(jìn)制化為二進(jìn)制) a = 011(^) b = 100則 a = 111(a ^ b的結(jié)果賦值給a,a已變成了7)(^) b = 100則 b = 011(b^a的結(jié)果賦給b,b已經(jīng)變成了3)(^) a = 111則 a = 100(a^b的結(jié)果賦給a,a已經(jīng)變成了4) 從上面的豎式可以清楚的看到利用異或運(yùn)算實(shí)現(xiàn)兩個(gè)值交換的基本過(guò)程。 下面從深層次剖析一下: 1.對(duì)于開始的兩個(gè)賦值語(yǔ)句,a = a ^ b,b = b ^ a,相當(dāng)于b = b ^ (a ^ b) = a ^ b ^ b,而b ^ b 顯然等于0。因此b = a ^ 0,顯然結(jié)果為a。 2. 同理可以分析第三個(gè)賦值語(yǔ)句,a = a ^ b = (a ^ b) ^ a = b 注:1.^ 即”異或“運(yùn)算符。它的意思是判斷兩個(gè)相應(yīng)的位值是否為”異“,為”異"(值不同)就取真(1);否則為假(0)。 2.^運(yùn)算符的特點(diǎn)是與0異或,保持原值;與本身異或,結(jié)果為0。
posted on 2010-03-12 18:18
landon 閱讀(9269)
評(píng)論(8) 編輯 收藏 所屬分類:
Program