1.按位取反或者二進位制補碼:~
把1變為0,把0變為1
2.按位與 :&
任何位與0組合都為0,任何位與1組合都為本身
應用:關閉位(清空位)需要開啟乙個值中的特定位,同時保持其他位不變(所有位為0)
把1變為0,其餘位不變。假設有乙個二進位制數00011010 ,從左到右的第4位1表示開關,現在要關閉開關(置為0)。而其餘的位表示其他功能,這些功能不變。所以此時你只能改變第四位。於是可以與乙個二進位制數11101111結果為00001010.只有第四位變了。
應用2:檢查某一位是否為1.比如檢查flag中的第一位是否為1.可以用if((flag & 1000) == 1000)printf("yes!");注意不能用if(flag == 1000),printf(「yes!」);
應用3:掩碼。與0不管什麼位結果都是0,相當於把值覆蓋了,你不知道那個值是什麼。與1的話,不管什麼位結果都是那個值的位,相當於把那個值暴露出來了。
3.按位或: |
任何位與1組合都為1,任何位與0組合都為本身
應用:開啟位(設定位) 需要開啟乙個值中的特定位,同時保持其他位不變。
再進一步講,開啟位是把0變為1(習慣上0為關閉,1為開啟)不變的位與0組合,要變的位與1組合。可參考與去思考
4.按位異或:^
相同為0,不同為1
應用:相同為0不同為1也可以解釋為假設乙個位為b,0^b是b。所以用0可以不改變原值。用1去異或取決與原值是什麼。如果是0,1^0為1,如果是1,1^1為0.基於這種特性,可以用作切換位。假設原值為00001111,你有兩個開關分別用從左往右第三位和第五位來表示,那麼異或的那個值的第三位和第五位用1.其餘用0表示不變(不會改變其他位的功能)所以用00101000,結果為00100111。結果顯示只有第三位(將0變為1)和第五位(將1變為0)變了。所以是切換位。
5 左移 <<
左移n位,在保持位數不變的情形下,最左邊的n位移除了,其餘位依次往左移,最後用0填充最右邊空出的n個位置。
int s = 1; s <<=2; 將2變為二進位制數為0001,左移2位為0100 ,0100 轉化為十進位制是4.
6.右移 >>
右移n位,在保持位數不變的情形下,最右邊的n位移除了,其餘位依次往右移,最後用0填充最左邊空出的n個位置
最後要注意的是& | 和&& ||的區別。前者操作的是位,後者操作的是整個值。
按位運算子
基本運算子 按位與運算子,可以對變數s的特定位清零,這時可以設定乙個變數mask,將mask中的特定位賦值為0,其他位置為1,然後作運算 s s mask 即可特定位清零。使用按位與運算,可以取變數s的指定位的值,這時可以設定乙個變數mask,將mask中的指定位賦值為1,其他位置賦值為0,然後作運...
按位運算子
部分參考scdxmoe的部落格 c語言提供了6個位操作運算子。這些運算子只能作用於整數運算元,及只能作用於帶符號或無符號的char,short,int,long型別。或運算 應用 常用來對乙個資料的某些位置1。方法 找到乙個數,對應x要置1的位,該數的對應位為1,其餘位為零。此數與x相或可使x中的某...
按位運算子
參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運算 的特殊用...