【題目描述】
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)
Notice:In the function, the numbers?N?and?M?will given in decimal, you should also return a decimal number.
給出兩個(gè)32位的整數(shù)N和M躬窜,以及兩個(gè)二進(jìn)制位的位置i和j始花。寫一個(gè)方法來(lái)使得N中的第i到j(luò)位等于M(M會(huì)是N中從第i為開(kāi)始到第j位的子串)
【注】在函數(shù)中,n和m的數(shù)字將以十進(jìn)制形式給出,還應(yīng)該返回一個(gè)十進(jìn)制數(shù)。
【題目鏈接】
www.lintcode.com/en/problem/update-bits/
【題目解析】
此題需要借用掩碼操作。大致步驟如下:
得到第i位到第j位的比特位為0,而其他位均為1的掩碼mask。
使用mask與 N 進(jìn)行按位與陋气,清零 N 的第i位到第j位。
對(duì) M 右移i位引润,將 M 放到 N 中指定的位置巩趁。
返回 N | M 按位或的結(jié)果。
獲得掩碼mask的過(guò)程:先獲得掩碼(1111…000…111)的左邊部分淳附,然后獲得掩碼的右半部分议慰,最后左右按位或即為最終結(jié)果。
【參考答案】