Q5.1 Set Bits

来源:互联网 发布:大数据应用发展趋势 编辑:程序博客网 时间:2024/06/10 06:17
Q:

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

A:

先将N的第0为到i位保存到ret,不包括第i位, 接下来将N的第0位到第j位置0, 包括第j位。 最后或上(m<<i) | ret。 

#include <iostream>#include <vector>using namespace std;void print_binary(int n) {vector<int> bit;int m = 1;int len = 8*sizeof(int);while(len--) {if (n&m) bit.push_back(1);else bit.push_back(0);m <<= 1;}while (!bit.empty()) {cout<<bit.back();bit.pop_back();}cout<<endl;}int update_bits(int n, int m, int i, int j) {int ret = (1<<i)-1;ret &= n;return (n>>(j+1))<<(j+1) | (m<<i | ret);}int main(){    int n = 1<<10, m = 21;    int ans = update_bits(n, m, 2, 6);    print_binary(n);    print_binary(m);    print_binary(ans);    return 0;}


0 0
原创粉丝点击