Update Bits

参考http://www.hawstein.com/posts/5.1.html

方案1:先将N中第0位到第i位保存下来(左闭右开:[0, i)),记作ret, 然后将N中第0位到第j位全清0([0, j]),通过向右移动j+1位然后再向左移动j+1位得到。 最后用上面清0后的值或上(m«i)再或上ret即可。

class Solution {
public:
    /**
     *@param n, m: Two integer
     *@param i, j: Two bit positions
     *return: An integer
     */
    int updateBits(int n, int m, int i, int j) {
        // write your code here
        int right = n & ((1 << i) - 1);
        int left = j >= 31? 0 : (n >> (j + 1)) << (j + 1);
        return left | (m << i) | right;
    }
};

 

posted on 2016-07-19 11:40  codingEskimo  阅读(134)  评论(0编辑  收藏  举报

导航