题目:给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束.
假定从 j 到 i 位足以容纳M,也即若M = 10011, 那么 j 和 i 之间至少可容纳5个位。 例如, 不可能出现 j = 3 和 i = 2的情况,因为第3位和第2位之间放不下M.
核心代码:
<pre><code>` func updateBits(n:Int,m:Int,i:Int,j:Int) -> Int {
// 设置掩码为 11100011
let allOnes:Int = ~0
let left = allOnes << (j + 1)
let right = ((1 << i) - 1)
let mask = left | right
let n_clear = n & mask
let m_shifted = m << i
return n_clear | m_shifted
}`</code></pre>
测试代码:
<pre><code>var updateResult:Int = bitManager.updateBits(n: 1024, m: 19, i: 2, j: 6) print("FlyElephant---最后的结果:\(updateResult)")
</code></pre>