将一个数的二进制位模式从左到右翻转并输出
2016-04-11 20:03
176 查看
题意举例如果这个数是25,它的二进制为
0000 0000 0000 0000 0000 0000 0001 1001
翻转后的二进制序列是
1001 1000 0000 0000 0000 0000 0000 0000
它所表示的数是 2550136832
题意分析:
法一:
根据二进制转换为十进制的方法;
通过位运算取出25的每一位二进制数,取出第一位将这个数乘以2^31,第二个数乘以2^30,依次取出并计算出总和;
法二:
通过位运算直接将取出的第一位左移31位,第二位左移30位,当然在这过程中要设置一个变量以便进行移位运算,经过循环将每一位都进行左移,最后得出的数的十进制就是25翻转后的数。
代码如下:
法一:
0000 0000 0000 0000 0000 0000 0001 1001
翻转后的二进制序列是
1001 1000 0000 0000 0000 0000 0000 0000
它所表示的数是 2550136832
题意分析:
法一:
根据二进制转换为十进制的方法;
通过位运算取出25的每一位二进制数,取出第一位将这个数乘以2^31,第二个数乘以2^30,依次取出并计算出总和;
法二:
通过位运算直接将取出的第一位左移31位,第二位左移30位,当然在这过程中要设置一个变量以便进行移位运算,经过循环将每一位都进行左移,最后得出的数的十进制就是25翻转后的数。
代码如下:
法一:
#include<stdio.h> #include<math.h> #include<stdlib.h> typedef unsigned int unit; unit reserse_bit(unit value) { int i = 0; unit num = 0; for (i = 0; i < 32; i++) { num += ((value >> i) & 1)*pow(2, 31-i); } return num; } int main() { int value = 0; int num = 0; scanf("%d", &value); num = reserse_bit(value); printf("%u\n", num); system("pause"); return 0; }法二:
#include<stdio.h> unsigned int reserse_bit(unsigned int value) { unsigned int ret = 0; int i = 0; while (i <32) { ret<<=1; ret |= (value>>i) &1; i++; } return ret; } int main() { int value = 0; int num = 0; scanf("%d", &value); num = reserse_bit(value); printf("%u\n", num); system("pause"); return 0; }
相关文章推荐
- 在一个字符串中提取子字符串
- C语言实现小游戏(三) 3*3棋盘游戏
- 用函数调用的方法输出乘法口诀表
- 打印杨辉三角
- 二分查找
- 【UFLDL-exercise7-stacked autoencoder for digit classification】
- 自定义圆图片
- (Array)27. Remove Element
- 由最小生成树算法改到最短路径算法代码----为了区分两者的区别
- 趣味计算:加油站加油
- 利用union类型测试机器是大端还是小端(Big_endian or Little_endian)
- C语言实现小游戏(二)
- 检查机器是大端字节序还是小端字节序
- a+aa+aaa+aaaa+aaaaa
- 模拟密码登录
- C语言实现小游戏(一)
- 可以一直接收键盘字符,并将大写转为小写,小写转为大写,数字不作处理
- 输出一个数的二进制数的奇数序列和偶数序列(三种方法)
- 将十进制转换为二进制和十六进制
- 用正确的方式写if语句——与零值作比较