题5:将整数二进制形式的奇偶位交换

题目描述:

  将一个整数的二进制表示形式的奇数位与偶数位进行交换。

  如: 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));

    }
原文地址:https://www.cnblogs.com/songchengyu/p/12944459.html