題目描述
有兩個32位整數n和m,請編寫算法將m的二進制數位插入到n的二進制的第j到第i位,其中二進制的位數從低位數到高位且以0開始。
給定兩個數int n和int m,同時給定int j和int i,意義如題所述,請返回操作後的數,保證n的第j到第i位均爲零,且m的二進制位數小於等於i-j+1。
測試樣例:
1024,19,2,6
返回:1100
思路
本題主要理解題意即可,不能被唬住。
m:1024:100000000 00
n:19 : 10011
要把n的二進制值插入m的第j位到第i位,只需要把n先左移j位,然後再進行或運算(|)即可。
m: 100 0000 0000
n : 000 0100 1100
m|n:100 0100 1100
解答代碼
class BinInsert {
public:
int binInsert(int n, int m, int j, int i) {
m <<= j;
return n | m;
}
};
如有不同見解,歡迎留言討論~~