C C 常見位運算

2021-10-05 03:15:58 字數 1076 閱讀 5526

<< 左移運算子

>> 右移運算子

<<< 無符號右移運算子

& 按位與

|按位或

~ 按位非

^ 按位異或,相同位為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...