zoukankan      html  css  js  c++  java
  • 题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));
    
        }
  • 相关阅读:
    Using Resource File on DotNet
    C++/CLI VS CSharp
    JIT VS NGen
    [Tip: disable vc intellisense]VS2008 VC Intelisense issue
    UVa 10891 Game of Sum(经典博弈区间DP)
    UVa 10723 Cyborg Genes(LCS变种)
    UVa 607 Scheduling Lectures(简单DP)
    UVa 10401 Injured Queen Problem(简单DP)
    UVa 10313 Pay the Price(类似数字分解DP)
    UVa 10635 Prince and Princess(LCS N*logN)
  • 原文地址:https://www.cnblogs.com/songchengyu/p/12944459.html
Copyright © 2011-2022 走看看