我正在调试问题的一些解决方案,这里是问题的详细信息,我的具体问题是,我认为第14行是错误的,因为我们没有找到M的子部分(我的意思是第i和第i之间的位) j-th),但使用整个M,对吗?
您将获得两个32位数字,N和M,以及两个位,即i和j。编写一种方法来将N和j之间的所有位设置为N等于M(例如,M变为位于i的N的子串并从j开始)。 例: 输入:N = 10000000000,M = 10101,i = 2,j = 6 输出:N = 10001010100
public static int updateBits(int n, int m, int i, int j) {
int max = ~0; /* All 1’s */
// 1’s through position j, then 0’s
int left = max - ((1 << j) - 1);
// 1’s after position i
int right = ((1 << i) - 1);
// 1’s, with 0s between i and j
int mask = left | right;
// Clear i through j, then put m in there
return (n & mask) | (m << i); // Line 14.
}
提前谢谢,
林
答案 0 :(得分:1)
此问题的作者应添加以下内容。
M
的长度始终等于i
之间的包含距离 和j
。例如,位置i
= 2和j
= 6这意味着5个空格 被占领;所以M的长度为5.这意味着N中的5位将代替M。
或者这样想。 i和j仅属于N,i和j之间的N中的每个元素将被M替换。