本来是用字符串做的,后来看见答案用位运算做,就用bitset做了一下。
/*You are given two 32-bit numbers, N and M, and two bit positions, i and j Write a
method to set all bits between i and j in N equal to M (e g , M becomes a substring of
N located at i and starting at j)
EXAMPLE:
Input: N = 10000000000, M = 10101, i = 2, j = 6
Output: N = 10001010100
*/
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main(){
bitset<32> n (string("10000000000"));
bitset<32> m (string( "10101"));
int i = 2, j= 6;
// n.replace(n.length()-m.length()-i,j-i+1,m);
// cout<<n<<endl;
int max = ~0;
bitset<32> left = max - ((1 << j) - 1);
bitset<32> right = ((1 << i) - 1);
bitset<32> mask = left | right;
n = (n & mask) | (m << i);
cout<<n<<endl;
}