<< 左移運算子
>> 右移運算子
<<< 無符號右移運算子
& 按位與
|按位或
~ 按位非
^ 按位異或,相同位為0,不相同為1
判斷x是奇數還是偶數:(x&1)==0
x乘以乙個2的n次方的數:x>n
消去x最後一位的1:x&(x-1)
求x的相反數: ~(x-1)或者~x+1
x的異或操作:~x = -x-1
把x從右邊數第n位變1:x|(1<<(n-1))(n從1開始)
把x從右邊數第n位變0:x&(~(1<<(n-1)))(n從1開始)
取x最後n位的值:x&((1《取x前n位的值,後面的全部置為0:x & (~((1 << (32 - n)) - 1))
只保留x右邊第乙個1,其他的全部置為0:x & (-x)
或x & ~(x - 1)
判斷x的第n位是偶數還是奇數:(x & (1 << (n - 1))) == 0
求x的絕對值:(n ^ (n >> 31)) - (n >> 31) 或(x >> 31) == 0 ? x : (~x + 1) 或(x + (x >> 31)) ^ (x >> 31)
求兩個數的最大數:(x & ((y - x) >> 31)) | (y & (~(y - x) >> 31))
返回x的符號:(i >> 31) | (-i >>> 31)(正數為1,負數為-1)
兩數相加:(x | y) + (x & y) 或(x ^ y) + ((x & y) << 1)
兩數相減:(x & ~y) - (~x & y)
求兩數的平均數:(x & y) + ((x ^ y) >> 1) 或(x + y) >> 1
判斷乙個數是不是2的次冪:(x != 0) && (x & (x - 1)) == 0
x對2的n次方求餘:x & (2^n - 1)(這裡的^是冪的次方)
判斷x和y的符號是否相同:(a ^ b) >= 0
異或運算子:x = a ^ b ^ x。 ==> if(x == a) x = b; if(x == b) x = a;
C C 位操作 位運算
在c語言中,可以單獨操控變數的位 bit 一般高階語言不會處理這級別的細節,c在提供高階語言便利的同時,還能為組合語言所保留的級別上工作,這使其成為編寫裝置驅動程式和嵌入式 的首選語言。目錄 二進位制整數 binary 有符號整數 八進位制 octal 十六進製制 hex 位運算子 按位與 的用途 ...
常見位運算
builtin ffs x 返回x的最後一位1是從後向前第幾位 builtin popcount x 返回x的二進位制下1的個數 x x 只保留最後一位1的二進位制 x x x 1 清零最低位的1 x 1 判斷奇偶 x 1 n 將第n位置1 x 1 n 將第n位置0 x 1 k 1 對x的第k位取反...
c c 位運算妙用
在vc 程式設計中,會發現微軟的很多api裡面都用到了位運算,比如這個函式 createwindowexa in dword dwexstyle,in opt lpcstr lpclassname,in opt lpcstr lpwindowname,in dword dwstyle,in intx...