博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
交换一个整数二进制表示中的奇数位和偶数位
阅读量:6230 次
发布时间:2019-06-21

本文共 420 字,大约阅读时间需要 1 分钟。

题目

原文:

写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第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://cuana.baihongyu.com/

你可能感兴趣的文章
Silverlight实例教程 - Validation数据验证基础属性和事件(转载)
查看>>
JAVA未来前景还能持续多久
查看>>
Sklearn学习笔记
查看>>
Android 内存优化 (防Memory Leak)
查看>>
C++之指针
查看>>
解决linux用户切换失败 su:execute /usr/bin 没有权限
查看>>
[LeetCode]题解(python):100-Same Tree
查看>>
win10 64位 安装scrapy
查看>>
iostat监控磁盘io
查看>>
centos7搭建ANT+jmeter+jenkins接口测试自动化环境
查看>>
分配问题(二部图的最佳匹配 KM) 线性规划与网络流24题
查看>>
Android子线程访问网络
查看>>
The Ninth Hunan Collegiate Programming Contest (2013) Problem J
查看>>
让你的字段支持保存手机中的emoji表情
查看>>
Java 数组
查看>>
金山实习周记(4)——Google Cloud Print
查看>>
[Windows Azure] Windows Azure Execution Models
查看>>
币值转换
查看>>
asp.net程序集冲突解决笔记(未能加载文件或程序集"XXXXXXXXX")
查看>>
memcached循序渐进(一) - 基础概念和安装
查看>>