LintCode : 更新二進制位

LintCode :更新二進制位

題目

給出兩個32位的整數N和M,以及兩個二進制位的位置i和j。寫一個方法來使得N中的第i到j位等於M(M會是N中從第i爲開始到第j位的子串)

樣例

給出N = (10000000000)2,M = (10101)2, i = 2, j = 6

返回 N = (10001010100)2

思路

題目要求我們將N中的第i到j位替換爲M,那麼首先,我們要將N中的第i到j位清零,然後將M挪到相對應的位置。最後將M放入N中。

代碼

int updateBits(int n, int m, int i, int j) {
        int temp = 0;
        if(j < 31)
            for(int k = i; k <= j; k++) temp += pow(2, k);
        else 
            temp = -pow(2, i);
        temp = -1 - temp;
        n = n & temp;
        m = m << i;
        return n | m;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章