Insertion: You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to insert M into N such that M starts at bit j and ends at bit i. You can assume that the bits j through i have enough space to fit all of M. That is, if M = 10011, you can assume that there are at least 5 bits between j and i. You would not, for example, have j = 3 and i = 2, because M could not fully fit between bit 3 and bit 2.
EXAMPLE
|
|
Hints: #137, #169, #215
解法
这个问题其实大致分为两步:
- 把
N中从i到j的bit统统设置为0 - 把
M向左移动i个bit - 两者OR一下
第一步中需要做一个Mask:
|
|
Mask可以分为两部分做:
|
|
Mask1可以用-1 << j + 1来得到(-1到bit都是1),Mask2可以用(1 << i) - 1得到。
代码:
|
|
评论