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
得到。
代码:
|
|
评论