位运算的常见操作

记录一下位运算的常见操作

把x右边连续的1变成0:

x & (x + 1)

把x右边连续的0变成1:

x | (x - 1)

把x右边的第一个0变成1:

x | (x + 1)

取出x右边连续的1:

(x ^ (x + 1)) >> 1

遍历x的子集:

for (int i = x; i; i = (i - 1) & x) {
	...
}

注意:这样遍历不会遍历到空集

原文地址:https://www.cnblogs.com/kjd123456/p/14321000.html