位运算的常见操作

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

把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) {
	...
}

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

posted @ 2021-01-24 15:21  kjd123456  阅读(94)  评论(0编辑  收藏  举报