此题的重点,是需要理解&运算的作用:与运算的作用:用1来做与是保留,用0来做与是消除。
package allexercise;
public class 将整数的奇偶位互换 {
public static void main(String[] args) {
int a = 9;
System.out.println(m(a));
}
private static int m(int i) {
int ou = i&0xaaaaaaaa; // 使用 1010 1010 1010 ... 做与运算取出偶数位
int ji = i&0x55555555; // 使用 0101 0101 0101 ... 做与运算取出奇数位
return ((ou>>1)^(ji<<1)); // 连起来
}
}
详细过程
代码中的
0xaaaaaaaa 与 10101010 10101010 10101010 10101010
相等,前者为十六进制的表示,后者是二进制的表示。