DAY 04 整数二进制的奇偶位互换
y x y x y x y x y x y x y x y x
& 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1
y 0 y 0 y 0 y 0 0 x 0 x 0 x 0 x
0与则消除 1与则保留 上述运算巧妙的将二进制位的奇偶分开
y 0 y 0 y 0 y 0 0 x 0 x 0 x 0 x
>>1 <<1
0 y 0 y 0 y 0 y x 0 x 0 x 0 x 0
将偶数位右移结果与奇数位左移结果异或得:
0 y 0 y 0 y 0 y
^ x 0 x 0 x 0 x 0
x y x y x y x y
public class Day04 {
public static void main(String[] args){
int a=6;
int b=m(a);
System.out.println("交换前整数:"+a);
System.out.println("交换前整数二进制:"+Integer.toString(a,2));
System.out.println("交换后整数:"+b);
System.out.println("交换后整数二进制:"+Integer.toString(b,2));
}
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);
}
}