将整数的奇偶位互换
题目描述: 将整数的奇偶位互换 例: 1001 -> 0110 9->6
解题思路1: 先将整数的二进制储存到数组中,然后互换位置,而转化为数组的方法有很多。
解题思路2: 先将整数的 偶数位、奇数位分别是什么取出来、然后异或运算
package com.miao.day01;
import java.util.Scanner;
//整数奇偶位互换
public class NumberParitySwap {
public NumberParitySwap() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
//声明需要处理的数字N
int N;
//初始化N
System.out.print("请输入整数:");
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
//解题思路1:转为数组
//因为整数为32为 数组为32位
int [] intArr = new int[32];
//数组初始化赋值
for(int i = 0;i < intArr.length;i++) {
//每次整数与 1 << i 与运算,得到整数N在第i位为1 或者 0
intArr[i] = (N & (1 << i)) == (1 << i) ? 1 : 0;
}
//声明交换后数字
int total = 0;
//奇偶位交换 并求和
for(int i = 0;i < intArr.length;i+=2) {
//交换奇偶位
int temp = intArr[i];
intArr[i] = intArr[i + 1];
intArr[i + 1] = temp;
//求和 交换后数字
total = total + (intArr[i] << i) + (intArr[i + 1] << (i + 1));
}
System.out.println("解题思路1: " + total);
//解题思路2:
//得到偶数位的值
int even = N & 0Xaaaaaaaa;
//得到奇数位
int odd = N & 0X55555555;
//偶数位向右移一位 ^ 奇数位向左移动一位
int num = (even >> 1) ^ (odd << 1);
System.out.println("解题思路2: " + num);
}
}