一些二进制位操作

“>>” : 右移操作:
注意:Java中的“>>”是算数右移:舍弃最低位,高位用符号位填补;
“>>>”是逻辑右移:舍弃最低位,高位用 0 填补。
“|”:或操作,两边有一个是1就是1,可以相当于加法用,如二进制的(10|1)就是(11)

整数集合set位运算
整数集合做标志时,比如回溯时的visited标志数组
vstd 访问 i :vstd | (1 << i)
vstd 离开 i :vstd & ~(1 << i)
vstd 不包含 i : not vstd & (1 << i)

并集 :A | B
交集 :A & B
全集 :(1 << n) - 1
补集 :((1 << n) - 1) ^ A
子集 :(A & B) == B
判断是否是 2 的幂 :A & (A - 1) == 0
最低位的 1 变为 0 :n &= (n - 1)
最低位的 1:A & (-A),最低位的 1 一般记为 lowbit(A) (取到一个数的最低位的1和之后的0)(一个数的相反数是这个数按位取反之后加1)

猜你喜欢

转载自blog.csdn.net/weixin_45736160/article/details/115082744
今日推荐