二进制插入
二进制插入
/*
2022年09月21日 11:43:09
m插到n
00010011
010000000000
插入到19的第2~6位
010001001100
注意,先倒着插,最后才能reverse回来
需要完全覆盖掉m
*/
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
string strn, strm;
while(n){
if(n % 2 == 1) // 最后一位为1
strn += '1';
else
strn += '0';
n /= 2;
} // "11001000"
while(m){
if(m % 2 == 1) // 最后一位为1
strm += '1';
else
strm += '0';
m /= 2;
} // "00000000001"
strn.replace(j, strm.size(), strm); // "00110010001" 覆盖的长度得是m的长度
reverse(strn.begin(), strn.end()); // "10001001100"
int ret = stoi(strn, nullptr, 2); // 需要转换成2进制
return ret;
}
};
/*
2022年09月21日 11:43:09
010000000000
10011
插入到2~6位
010000000000
10011
m左移j位,再和n或一下就行
010001001100
*/
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
return n | (m << j);
}
};