请解释此位交换代码(Java)
我试图提高面试风格的问题。 我遇到了这样一个问题: 给定一个32位整数输入x,交换其奇偶位并返回结果整数。(例如,交换位0和位1,交换位2和位3,等等)。 例如: x=5,二进制代码=0101 swapOddEvenBits(5)->10 答复如下:请解释此位交换代码(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) ); }
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
,以获得相同的结果。谢谢您的解释。