请解释此位交换代码(Java)

请解释此位交换代码(Java),java,bit-manipulation,Java,Bit Manipulation,我试图提高面试风格的问题。 我遇到了这样一个问题: 给定一个32位整数输入x,交换其奇偶位并返回结果整数。(例如,交换位0和位1,交换位2和位3,等等)。 例如: x=5,二进制代码=0101 swapOddEvenBits(5)->10 答复如下: public int swapOddEvenBits(int x) { return ( ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1) ); }

我试图提高面试风格的问题。 我遇到了这样一个问题:

给定一个32位整数输入x,交换其奇偶位并返回结果整数。(例如,交换位0和位1,交换位2和位3,等等)。 例如: x=5,二进制代码=0101 swapOddEvenBits(5)->10

答复如下:

public int swapOddEvenBits(int x) {

 return ( ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1) );

}
public int swapOddEvenBits(int x){

返回((x&0xaaaaaa)>>1)|((x&0x555555)您的值是十六进制的
int
文本

System.out.println(Integer.toBinaryString(0xaaaaaaaa));
System.out.println(Integer.toBinaryString(0x55555555));
哪个输出

10101010101010101010101010101010
1010101010101010101010101010101

您可以用
0b10101010101010101010101010101010101011010101010
替换
0xaaaaaa
,用
0b10101010101010101010101011011010101010
替换
0x55555555
,以获得相同的结果。

谢谢您的解释。