题目描述:
将一个整数的二进制表示形式的奇数位与偶数位进行交换。
如: 9的二进制是 1001 奇偶位交换后得到 0110
原理: 就是利用二进制位运算的技巧,先将整数N与 aaaa aaaa (偶数位全为1的数)进行与(&)运算,提取整数N的偶数位,然后将整数N与 5555 5555 进行逻辑与(&)运算,提取整数N的奇数位,最后将提取出来的奇数位左移一位,偶数位右移一位 然后将两个位移动的结果进行异或运算,即可得到奇数位与偶数位交换的结果。
实现步骤:
1. N与aaaa aaaa 进行与运算,获取偶数位
2.N与5555 5555 进行与运算,获取奇数位
3.获取的奇数位左移一位,偶数位右移一位。两个移动后的结果进行异或(^)运算得出结果
具体代码:
public static void main(String[] args) { //分别与 aaaaaaaa 和55555555 进行与运算,得到的两个分别左移和右移然后异或 Scanner input =new Scanner(System.in); System.out.println("请输入一个整数:"); int N=input.nextInt(); //1. 整数 与 偶数位全部为1的数 进行与运算,可以获得整数中偶数位的信息。 int ou=N&0xaaaaaaaa; // 1010 1010 1010 1010 1010 1010 1010 1010 //2. 整数 与 奇数位全部为1的数 进行与运算 ,可以获取整数中奇数位的信息。 int ji=N&0x55555555; // 0101 0101 0101 0101 0101 0101 0101 0101 //3. 把偶数位的信息左移一位,奇数位的信息右移一位 ,就可以交换整数的奇偶位。 int res=(ou>>1)^(ji<<1); System.out.println(Integer.toString(N,2)); System.out.println(Integer.toString(res,2)); }