class Solution {
public:
int insertBits(int N, int M, int i, int j) {
//按题目的意思,并不是把 M 移位后和 N 相加,而只是单纯地覆盖。所以可以分两步进行:
// 把 N 中 i - j 的位置置零先
// 把 M 左移 i 位后和 N 相加
for(int k=i;k<=j;k++){
N = N&~(1<<k);
}
M = M<<i;
return (M+N);
}
};
class Solution:
def insertBits(self, N: int, M: int, i: int, j: int) -> int:
for k in range(i,j+1):
N = N &~(1<<k)
return N | (M<<i)
#将第i位变为0:
#n=n&~(1<<i) 将1向左移i位取反后与原数按位与,取反后第i位是0,其他位是1,按位与原数其他位不变,第i位为0