常見位運算

2022-09-04 15:06:31 字數 940 閱讀 5293

__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...