请解释一下这个Bit Swapping代码(Java)

时间:2017-02-23 04:06:47

标签: 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) );

}

请有人解释一下。 另外,为什么我不能用(x&amp; 1010101010101)&gt;&gt; 1之类的东西呢? 我最初尝试解决这个问题是将int转换为二进制字符串,然后交换相邻的字符然后转换回int。那会有用吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

您的值为int十六进制的文字,

System.out.println(Integer.toBinaryString(0xaaaaaaaa));
System.out.println(Integer.toBinaryString(0x55555555));

哪个输出

10101010101010101010101010101010
1010101010101010101010101010101

可以0xaaaaaaaa替换为0b10101010101010101010101010101010,将0x55555555替换为0b1010101010101010101010101010101,以获得相同的结果。