1. 程式人生 > >幾個典型的按位運算子示例

幾個典型的按位運算子示例



分析:
x的值:xxx...xnnnx...xxx     (n表示需要被替換的n位)
y的值:yy..............ynnn    
題目需要用y中的n位值替換x中的n位值。要實現該功能,需要以下幾步:
我們需要對x中n位清零,把y中最右邊n位其他以為的位都清零並左移到第p位處,然後進行or操作。
xxx....x000x...xxx |(or操作)
000...  nnn....000     
--------------------------
xxx....xnnnx...xxx  (操作完成,得到想要的值)


步驟分解:
1.對x中n位清零,得到【xxx....x000x...xxx】


a.得到 【111...000...111】這樣的結果。一般都用0作為輔助來得到想要的結果。
~0<<n:得到【111......000】
~(~0<<n):得到【000......111】
~(~0<<n)<<(p + 1 - n):得到【000...111...000】
~(~(~0<<n)<<(p + 1 - n)):得到【111...000...111】


b.得到【xxx....x000x...xxx】結果。
上一步步驟a中的結果與【x的值:xxx...xnnnx...xxx】&與運算,得到
xxx...xnnnx...xxx
111....000....111 &
-----------------
xxx...x000x...xxx
總運算:
x &~(~(~0<< n) << (p + 1 -n))


2.對y處理,得到【000...  nnn....000】
~0<<n:得到【111......000】
~(~0<<n):得到【000......0111】
與y相與&,得到【000......0nnn】
移位運算<<(p + 1 - n)),得到:【000...  nnn....000】
總運算:
(y & ~(~0 <<n )) << (p + 1 - n)


3.合併步驟1,2,用與運算: