一、题目介绍
插入。给定两个32位的整数N与M,以及表示比特位置的i与j。编写一种方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M = 10 011,那么j和i之间至少可容纳5个位。例如,不可能出现j = 3和i = 2的情况,因为第3位和第2位之间放不下M。
示例1:
输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6
输出:N = 1100(10001001100)
示例2:
输入: N = 0, M = 31(11111), i = 0, j = 4
输出:N = 31(11111)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-into-bits-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
本题考查位运算,具体步骤如下:
(1)将参数N的第i位到第j位均置零。
(2)将参数M左移i位。
(3)将M与N进行或运算,即为结果。
三、解题代码
class Solution {
public:
int insertBits(int N, int M, int i, int j) {
int mask = ((1 << (j-i+1))-1) << i;
mask = ~mask; //取反
N &= mask;
M <<= i;
return M|N;
}
};