首页 > 其他 > 详细

交换一个整数二进制表示中的奇数位和偶数位

时间:2015-04-22 21:58:59      阅读:219      评论:0      收藏:0      [点我收藏+]

题目

原文:

写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第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个指令。总结之,就是第一种方法更好。

交换一个整数二进制表示中的奇数位和偶数位

原文:http://www.cnblogs.com/wuchanming/p/4448703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!