左右翻转二进制数==》繁琐与精简
2015-10-16 21:43
197 查看
实现:
//00000000000000000000000000011001
//10011000000000000000000000000000
这种翻转
方法一和方法二思路大致一样,可以方法二却十分麻烦。
方法一(简单)
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1703666
//00000000000000000000000000011001
//10011000000000000000000000000000
这种翻转
方法一和方法二思路大致一样,可以方法二却十分麻烦。
方法一(简单)
#include<stdio.h> #include<math.h> unsigned int reverse_bit(unsigned int value) { int i = 0; unsigned int Value ; unsigned int num = 0; for (i = 1; i <= 32; i++) { Value = value; int b = ((value%2)&&1); num = num + b*(pow(2, (32 - i))); value=Value >> 1; } return num; } int main() { unsigned int number = 25; printf("%u", reverse_bit(number)); } 方法二(思想简单但写的十分复杂,我都不知道我咋想出来的)
#include<stdio.h> #include<math.h> unsigned int zhishu(int x, int cishu) { unsigned int num = pow(2, cishu); return (x*num); } int num_sing(int max) { if (max % 2 == 0) { return 0; } else { return 1; } } unsigned int fzsign(unsigned int a) { unsigned int num = 0; int sing = num_sing(a); int cishu = 0 + sing; unsigned int tmp = a; unsigned int b = 0; while (a != sing) { a = a / 2; cishu++; } /*printf("%d\n", cishu);*/ int sings = num_sing(tmp); int tmp2 = cishu; cishu = cishu - 1; while (tmp != sings) { b = tmp % 2; tmp = tmp / 2; num = num + zhishu(b, cishu); cishu--; } num = num + sings; num = num << (32 - tmp2); return num; } int main() { unsigned int a = 25; unsigned int num=fzsign(a); printf("%u", num); } 法二像不像大杂烩!!!
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1703666
相关文章推荐
- 【面试题】C语言:实现一个函数,判断一个数是不是素数。
- poj Ikki's Story IV - Panda's Trick (2-sat)
- 好用易上手的免費插件 Fungus
- 无语凝噎
- 堆排序
- 编写,编译,运行Java程序过程中的编码解码过程
- 0-1背包问题
- unity3d 插件uSpeak Voice Chat 网络音频聊天
- Oracle数据库中的数据库名、全局数据库名、实例名、ORACLE_SID
- Activity--intent
- unity3d 插件 Fast Shadows 快速投影
- yii笔记—数据库1
- FastGUI教程
- 免费的ER 设计软件调研
- 二、安装SVN及配置
- Android经典底部选项卡集成方式之二
- 精品软件推荐 迅雷快鸟 中国电信宽带加速软件
- maven profile介绍
- caffe训练网络的实践
- 使用方便 正则表达式grep,sed,awk(一)