逆转一个整数的二进制表示问题
来源:互联网 发布:安装windows应用商店 编辑:程序博客网 时间:2024/06/10 09:14
解法一:
这个容易理解。
//解法一 #define UNSIGNED_BITS_COUNT 32 unsigned int BitRev3(unsigned int input) { unsigned int ret, i; for(ret = i = 0; i < UNSIGNED_BITS_COUNT; i++, input = input >> 1) ret = (ret << 1) | (input & 1); return ret; }
解法二:
第一行代码为奇偶位相互交换;第二行为以两位为一单元,奇偶单元进行交换;第三行为以四位为一单元,奇偶单元进行交换;第四行为以八位为一单元,奇偶单元进行交换;最后一行为以十六位为一单元,奇偶单元进行交换。至此,32位反转完成,算法结束。
//解法二 unsigned int bit_reverse(unsigned int n) { n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa); n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc); n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0); n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00); n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000); return n; }
解法三:
思路同解法二,但做了优化。
//解法三 unsigned rev(unsigned x) { x = (x & 0x55555555) << 1 | (x >> 1) & 0x55555555 ; x = (x & 0x33333333) << 2 | (x >> 2) & 0x33333333 ; x = (x & 0x0f0f0f0f) << 4 | (x >> 4) & 0x0f0f0f0f ; x = (x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & 0xff00) | (x >> 24) ; return x ; }
【转自:http://www.cnblogs.com/iezhyg/archive/2011/09/08/2171328.html】
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题
- 逆转一个整数的二进制表示问题[转]
- 逆转一个整数的二进制表示
- 求逆转一个整数的二进制表示
- 编程之美 2.7 最大公约数 扩展问题之逆转一个整数的二进制表示
- 一个整数的二进制表示中1的个数
- 求一个整数的二进制表示中1的个数
- 求一个32位整数的二进制表示形式
- 寻找一个整数二进制表示中1的个数
- 给定一个整数,求它的二进制表示
- 一个整数N二进制表示中1的个数
- 反调试1
- Android面试题:sim卡的EF 文件有何作用
- where 1=1作用
- javabean的自省机制
- Become a Good Programmer in Six Really Hard Steps
- 逆转一个整数的二进制表示问题
- Qt入门-使用Qt中的断言
- Android S5PV210 camera S_INPUT实现
- 学习android若干资源
- js实现父页面的刷新
- QNX驱动开发——操作系统之进程调度和进程通信
- Ubuntu12.04下JDK、Eclipse的安装,在linux终端中用命令启动eclipse
- android 源码总体结构
- 非静态内部类