-2
我试图改进面试风格问题。 我碰到过这个:请解释此位交换代码(Java)
给定一个32位整数输入x,交换其奇数和偶数位,并返回结果整数。 (例如,比特0和比特1被交换,比特2和比特3被交换,等等)。 例如: X = 5,二进制代码= 0101 swapOddEvenBits(5) - > 10
答案如下:
public int swapOddEvenBits(int x) {
return (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
}
有人可以解释这一点,请。 另外,为什么我不能使用像(x & 1010101010101)>> 1而不是? 我最初尝试解决这个问题是将ints转换为二进制字符串,然后交换相邻的字符,然后转换回int。这会起作用吗? 谢谢。
谢谢你的解释。 – Raul