所以我被赋予了将两个 32 位整数交织成一个的任务,如下所示:
a_31,...,a_0 and b_31,...,b_0, return the 64-bit long that contains their bits interleaved: a_31,b_31,a_30,b_30,...,a_0,b_0.
我尝试通过从每个具有 MSB 位置为 1 的助手获取 MSB 来完成此操作,然后将它们组合起来。基本上将“a” int 放在奇数位置,将“b” int 位放在偶数位置。
我不能调用其他函数(甚至 Math.pow)
我的代码:
public static long interleave(int a, int b) {
long tempA = a;
long tempB = b;
long helper = 0x0000000080000000L;
long ans=0;
for (int i = 0; i <32 ; i++) {
ans = ans | ((helper & tempA) << (31-(2*i)));
ans = ans | ((helper & tempB)<<(30-(i+i)));
helper = helper >>>1;
}
return ans;
}
我的测试在这里失败了:
Expected :-6148914691236517206
Actual :7905747459547660288
调试和找出问题的一些帮助会很好,以及如何解决问题的建议。