zoukankan      html  css  js  c++  java
  • 交换一个整数二进制表示中的奇数位和偶数位

    题目

    原文:

    写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第0位和第1位交换,第2位和第3位交换…)

    解答

    这道题目比较简单。分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可。

    代码如下:

    int swap_bits(int x){
        return ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555);
    }

    当然也可以采用更自然的方式来写这段代码:

    int swap_bits1(int x){
        return ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1);
    }

    上面的代码思路和作用都是一样的,不过按照《Hacker’s delight》这本书里的说法, 第一种方法避免了在一个寄存器中生成两个大常量。如果计算机没有与非指令, 将导致第二种方法多使用1个指令。总结之,就是第一种方法更好。

  • 相关阅读:
    酒店预订2
    酒店预订1
    软件2
    酒店预定系统
    系统软件构成
    用例图
    软件构成
    业务用例名
    业务用例结果查询
    业务用例导师交流
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4448703.html
Copyright © 2011-2022 走看看