在N到M中替换第i和第j之间的位

时间:2015-10-15 22:12:45

标签: java algorithm

我正在调试问题的一些解决方案,这里是问题的详细信息,我的具体问题是,我认为第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.
}
提前谢谢, 林

1 个答案:

答案 0 :(得分:1)

此问题的作者应添加以下内容。

  

M的长度始终等于i之间的包含距离   和j。例如,位置i = 2和j = 6这意味着5个空格   被占领;所以M的长度为5.这意味着N中的5位将代替M。

或者这样想。 i和j仅属于N,i和j之间的N中的每个元素将被M替换。