把2进制某一位变为1或0的位运算方法
将第i位变为1:
n=n|(1<<i) 将1向左移i位与原数按位或,原数其他位不发生变化,第i位变为1
将第i位变为0:
n=n&~(1<<i) 将1向左移i位取反后与原数按位与,取反后第i位是0,其他位是1,按位与原数其他位不变,第i位变为0
class Solution {
public:
int insertBits(int N, int M, int i, int j) {
for(int a=i;a<=j;a++){
N=N&~(1<<a);//将第a位变为0
}
N=N+(M<<i);//加上位运算后的M。
return N;
}
};