C語言位元運算符的使用

來源:互聯網
上載者:User

 一、按位與運算子&
參與運算的兩個量按照對應的位進行與運算,且
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.