位运算都是针对二进制化的数
//查看opp的二进制的第i位是0还是1
opp & 1 //结果就是最后一位是什么就是什么,也可以用于检查十进制中的数是不是奇数
opp>>i //右移i位
opp>>i & 1 //看看从右往左第i位是什么
i>>j&1状态压缩dp用到的检查i的第j位是否为1
i-(1<<j)状态压缩去掉i的第j位上的1
//lowbit用于返回x的二进制的最后一个1开始往后的值(比如1010返回二进制10也就是2)
//可以利用lowbit统计一个数有多少个1,每次用x-=lowbit(x) res++最后res就可以统计了
int lowbit(int x){
x&(~x+1);
}
“>>1”右边一位。其值相当于除2。 你这么记吧,左程云,左指就是乘
偶数自然是直接除以2,而奇数除以2的值总是跟比它小的最近的偶数的值相同
<<1 乘2就有没有区别了
1<<n 等价于 2的n次方
i>>j&1
opp >>= 1;从二进制的角度讲,就是右移一位,即最右边的那位消失掉,也可以视作除以2
求关注