二进制交换奇偶位
例 9:1001交换奇偶位后变为6:0110
思路:
1.取出所有的偶数位——与1010 1010 1010……相与,(用16进制表示为0xaaaaaaaa)1的作用为偶数位保留,0的作用为奇数位全置0,将偶数位右移一位,偶数位到奇数位
2.取出所有的奇数位——与0101 0101 0101……相与,(用16进制表示为0x55555555)奇数位保留,偶数位全为0,将奇数位左移一位,奇数位到偶数位
3.前两步所得结果^(异或)操作——合并
代码:
public class Hello {
public static void main(String[] args)
{
int a=9;
System.out.println(Integer.toString(a,2));
int b=m(9);
System.out.println(Integer.toString(b,2));
}
private static int m(int i){
int ou=i&0xaaaaaaaa;
int ji=i&0x55555555;
return (ou>>1)^(ji<<1);
}
}