• 题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));
    
        }
  • 相关阅读:
    洛谷 P1213 时钟 &&IOI 1994 The Clocks
    P1457 城堡 The Castle
    [USACO08OCT]牧场散步Pasture Walking
    洛谷 P1262 间谍网络
    [USACO09DEC]牛收费路径Cow Toll Paths
    1266: [AHOI2006]上学路线route
    1093: [ZJOI2007]最大半连通子图
    洛谷 P3797 妖梦斩木棒
    1821: [JSOI2010]Group 部落划分 Group
    2019中国产业互联网领袖峰会(上海)
  • 原文地址:https://www.cnblogs.com/songchengyu/p/12944459.html
Copyright © 2020-2023  润新知