原题链接: link
文章目录
题目
描述
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。
测试样例:
1024,19,2,6
返回:1100
解题思路
要将较小的数连接到较大的数中二级制指定位置上为0的地方,而两个数二进制链接我们则可以想到用或( | )的方法进行处理,比如
1024 : 10000000000
19:10011
这样我们就可以让19的二进制位向左移动j位在进行与运算就可:
10000000000
00001001100
得:10001001100—> 1100(十进制)
完整代码
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
// write code here
return n | (m << j);
}
};