我們復習一下位運算,這里介紹一下(& ,|, ?^)的用途。
按位與 ------------&
規則: ? 0&0=0 ? ?0&1=0 ? 1&0 =0 ?1&1=1 ?( 兩位為1,才是1)
作用: ?清零與保位。通常用來將特定的位清零,其他位保持不變。
比如:
00101011 ,我們希望將此數的7,8位請零,其它位保持不變,則只需與如下數字做&運算。
0 0 1 ?0 ?1 ?0 ?1 ?1
? ?& ? ?1 ?1 1 ?1 ?1 1 ?0 ?0 ? ??
0 ?0 ? 1 ?0 1 0 ?0 ?0
技巧: ? 清零,清哪位,就令哪位為0;保位,保哪位,就令哪位為1
按位或 ------------|
規則: ? 0|0=0 ? ?0|1=1 ? 1|0 =1 ?1|1=1 ? ? ?(有一位為1,則為1)
作用: 設位。通常用來將特定的位設為1,其它保持不變。
比如:
將00110000后四位設為1.
則 ? 0 0 1 1 0 0 0 0?
? | ?0 0 0 0 1 1 1 1
0 ?0 ?1 1 1 1 1 1
技巧: 想設哪位為1,則設為1,其它為0
按位異或 -----------^
規則: ? 0^0=0 ? ?0^1=1 ? 1^0 =1?1^1=0 ? ?(相同為0,不同則為1)
作用:?
1. 使特定位翻轉
假設有01111010,想使其低四位翻轉,即1變為0,0變為1.可以使其與00001111進行^運算,即:
0 1 1 1 1 0 1 0
? ?^ ? 0 ?0 ?0 0 1 1 1 1
0 1 ?1 1 0 1 0 1
要使哪幾位翻轉,就將與其進行^運算的該幾位置為1即可。
2.與0異或,保持原值
例如: 012^00=012 ? ?
0 0 0 0 1 0 1 0
? ? ^ ? ?0 0 0 0 0 0 0 0
0 0 0 0 1 0 1 0
3. 與自身異或,設為0
例如:012^012=00
0 0 0 0 1 0 1 0
? ?^ ? ? 0 ?0 0 0 1 0 1 0
0 ?0 0 0 0 0 0 0
4.交換兩個值,不用臨時變量
a=a^b;
b=b^a;
a=a^b;