package _1_Bit_Operation;
import java.util.Scanner;
/**
* @Auther: YuanJun
* @Date: 2021/12/9 - 12 - 09 - 10:40
* @Description: _1_Bit_Operation
*/
//将整数的二进制位进行奇偶位置互换
public class test8 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
/**
* 奇数位用x表示,偶数位用y表示
* 先保留偶数位
* x y x y x y x y
* & 1 0 1 0 1 0 1 0
* --------------------
* x 0 x 0 x 0 x 0
* 再保留奇数位
* x y x y x y x y
* & 0 1 0 1 0 1 0 1
* --------------------
* 0 y 0 y 0 y 0 y
*
* 保留的奇数位数左移一位,保留的偶数位数右移一位,移位后进行异或运算
* 0 x 0 x 0 x 0 x
* ^ y 0 y 0 y 0 y 0
* --------------------
* y x y x y x y x
*
* 如: 10100 20
* 00000000 00000000 00000000 00010100 -> 20
* 奇偶位置互换后得到
* 00000000 00000000 00000000 00101000 -> 40
*
* 1.取偶数位
* 00000000 00000000 00000000 00010100
* & 10101010 10101010 10101010 10101010
* --------------------------------------
* 00000000 00000000 00000000 00000000
* 2.取奇数位
* 00000000 00000000 00000000 00010100
* & 01010101 01010101 01010101 01010101
* --------------------------------------
* 00000000 00000000 00000000 00010100
* 3.偶数位右移一位,奇数位左移一位,再进行异或运算
* 00000000 00000000 00000000 00000000
* ^ 00000000 00000000 00000000 00101000
* --------------------------------------
* 00000000 00000000 00000000 00101000 得到 -> 40
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = input.nextInt();
int ji = n & 0x5555555; //n&01010101 01010101 01010101 01010101
int ou = n & 0xaaaaaaa; //n&10101010 10101010 10101010 10101010
int m = (ji<<1)^(ou>>1);
System.out.println(m);
}
}
