一、解题思路
- 先用32位的
0101 0101 ... 0101 0101
获取该整数的所有奇数位。 - 再用32为的
1010 1010 ... 1010 1010
获取该整数的所有偶数位。 - 将奇数位左移1位变成偶数位,偶数位右移1位变成奇数位;之后异或。
二、代码
public class 交换奇偶位 {
public static void main(String[] args) {
int num = 24;
int res = changeBit(num);
System.out.println(res);
num = changeBit(res);
System.out.println(num);
}
private static int changeBit(int num){
int oddBit = num & 0x55555555; //和0101...0101相与得奇数位
int evenBit = num & 0xaaaaaaaa; //和1010...1010想与的偶数位
//奇数位左移1位,所有的奇数位都变到偶数位;偶数位右移1位都变到奇数位
return (oddBit<<1) ^ (evenBit>>1);
}
}