一、按位與運算子&
參與運算的兩個量按照對應的位進行與運算,且
0&0→0, 0&1→0, 1&0→0, 1&1→1
利用按位與運算,我們可以方便地實現清零或取一個數的某些位。
例如 取出a的低4位,將b的低4位清零。
0x0F&a 取出a的低4位
0xF0&b 將b的低4位清零
這種方法稱為“屏蔽方法”,其中0x0F、0xF0稱為屏蔽字。
二、按位或運算子|
參與運算的兩個量按照對應位進行或運算,且
0|0→0, 0|1→1, 1|0→1, 1|1→1
利用按位或運算,我們可以方便地實現置位或組合新值。
例如 將整數i(2位元組)的低位元組全置為1。
0xff|i
例如 將整數a的低位元組和整數b的高位元組組成一個新值。
先取出a的低位元組:0xff&a (或0x00ff&a)
再取出b的高位元組:0xff00&b
然後組成新值: 0xff&a|0xff00&b
三、按位異或運算子^
參與運算的兩個量按照對應的位進行異或運算,且
0^0→0, 0^1→1, 1^0→1, 1^1→0
此外,一個數與0異或仍保持不變,即a^0=a
一個數與自己異或結果為0,即a^a=0
四、按位取反運算子~
這是位元運算符中唯一的單目運算子,即將數的每一位取反(0→1,1→0)。
例如 將整數a的最低位清零
0xfffe&a
對於有的大中型電腦,整型佔4個位元組,如將上式直接挪用過去,則將丟失a的兩個高位元組,必須改為
0xfffffffe&a
因此程式通用性降低。若改為下面形式則通用:
~1&a
五、左移運算子<<
將一個數的各二進位位全部左移若干位。左移後右邊補入0,左邊移出的位捨棄。
例如 若a=3,則b=a<<1,b為6
c=b<<1,c為12
即左移一位相當於乘以2。用這種方式實現乘法運算比其它方式快得多,但只適用於左邊沒有1被移出的情況。例如
a=0x83,則a<<1 結果為6
六、右移運算子>>
將一個數的各二進位位全部右移若干位。右移後,右邊移出的位被捨棄,左邊補入的位分兩種情況:
(1) 對無符號數,左邊補入0
(2) 對有符號數,若符號位為0(正數)則補入0;若符號位為1(負數)則補入1。
本篇文章來源於 駭客基地-全球最大的中文駭客站 原文連結:http://www.hackbase.com/tech/2009-02-02/44960.html