Source: Cracking the Code Interview 5.1
Description
You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method
to insert Minto 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
Input: N = 10000000000, M = 10011, i = 2, j = 6
Output: N = 10001001100
将二进制N的i到j位换成M
思路
简单的方式是用string,但这样就脱离了这道题的初衷。
由于一个数或运算0都是它本身,可以联想清空N的i-j的位(变为0),然后将M扩充使其值刚好对其N的i-j位而保持其他位都为0,再将 N | M
步骤如下:
- 清空 N 中的 i-j 位
- 移动M使之对齐 N 的 i-j 位
- 合并 M 和 N
Solution
注释中以N = 10000000, M = 101, i = 2, j = 4为例
|