倒序输出一个无符号二进制数的所有位
2015-10-24 09:50
246 查看
#include <stdio.h> #include <math.h> uint reverse_bit(uint num) { uint ret = 0; int i = 0; for (i = 0; i < 32; i++) { ret += ((num >> i) & 1)*pow(2, 31 - i); } return ret; } int main() { printf("%u\n", reverse_bit(4026531840)); getchar(); return 0; }
要将一个数的所有二进制位翻转过来的话要操作32次,所以要用一个for循环,并且循环32次,所以以 上代码的代码并没有什么不妥,但是细心一分析的话,你就会发现当i循环到31次的时候,num的最低 位已经到了最高位,当循环到32次时,程序结果必然发生错误,所以我们把for循环体改为
for (i = 0; i < 32; i++) { ret <<= 1; ret |= ((num >> i) & 1); }
如果程序改为这样就会好一些,程序消耗掉了i=0这一次循环,因为想左移0位并没有什么实际意义,这
中改法是有用的。
相关文章推荐
- 事件处理器(eventhandler,或称为事件处理程序)onload
- 走错了,就得重走
- perl入门
- 调研---自适应 ---sizeclass
- CSS中的绝对定位与相对定位
- JAVA学习课第五十八届 — GUI
- POJ 3648 Wedding
- 第 四 十 天:squid 代 理 一 些 配 置
- JAVA中自定义日志输出到指定文件
- 三数之和
- asp.net mvc3.0安装失败如何解决
- iscsi 应用
- Struts框架02-执行流程
- Lua 错误处理方法
- (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- 学习Open GL在VS2013编译过程中遇到的问题
- VC++ WINDOWS自定义消息范围
- PHP 性能分析(一): XHProf & XHGui 介绍
- 如何自建FTP站点
- 如何用Timer作为变量为FC/FB传递参数?