【Java】给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。

来源:互联网 发布:淘宝伪造授权书 编辑:程序博客网 时间:2024/05/21 15:41

给定两个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。

示例:

输入: N = 10000000000, M = 10011, i = 2, j = 6

第一步 将n从j到i的位清零, 需要一个形如11100000111的掩码,其中从j到i为0,然后将n与掩码按位与

第二步 将m左移i位,使之与j和i之间的位对齐

第三步 合并M与N

public class updateBits {int updateBits(int n, int m, int i, int j) {int allOnes = ~0;int left = allOnes << ( j + 1 );int right = ( 1 << i ) - 1;int mask = left | right;int n_cleared = n & mask;int m_shifted = m << i;return n_cleared | m_shifted;}}


0 0
原创粉丝点击