__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位取反
for(int i = x;i;x&(i - 1))
遍歷所有x的1的子集,如5的子集:[1,4,5]。3的子集:[1,2,3]
x >> n & 1
判斷第n位的奇偶
__builtin_parity(x)
返回x的二進位制下1的個數的奇偶性
__builtin_clz(x)
返回x的二進位制下前導的0的個數
__builtin_ctz(x)
返回x的二進位制下末尾的0的個數
x & (~0 << n)
將最後n位變成0
x & (x + 1)
去掉右邊連續的1
x & (x ^ ( x - 1))
去掉右起第乙個1的左邊
(x ^ (x + 1) >> 1)
取右邊連續的1
常見的位運算
計算機中的數在記憶體中都是以二進位制形式進行儲存的,用位操作就是直接對整數在記憶體中的二進位制位進行操作,因此其執行效率非常高,在程式中盡量使用位運算進行操作,這會大大提高程式的效能。位操作是各大網際網路公司面試經常會問的一類問題。int a 8 a 3 移位前 0000 0000 0000 000...
常見的位運算
運算 效果x 1 x 1 乘 除2 x 1 判斷x是否為奇數 x x 1 去掉x最低位的1 x x 取出最低位的1 x 1 i 1 判斷二進位制下x的第i位是不是1 x 1 i 1 把二進位制下x的第i位變成1 由於今天是第一次運用狀態壓縮,所以總結一下剛剛做的用了狀態壓縮的乙個題目。先附上這個題目...
C C 常見位運算
左移運算子 右移運算子 無符號右移運算子 按位與 按位或 按位非 按位異或,相同位為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...