左右翻转二进制数==》繁琐与精简
来源:互联网 发布:企业网盘系统源码 编辑:程序博客网 时间:2024/05/12 19:45
实现:
//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
0 0
- 左右翻转二进制数==》繁琐与精简
- 一个小矩阵的翻转t=1为上下翻转, t=0为左右翻转
- leetcode_190. Reverse Bits 比特流反转,求十进制数的32位二进制串翻转后对应的十进制数,二进制与十进制转换
- 二进制翻转
- 二进制翻转
- 二进制翻转
- 将整形的二进制数翻转再求值
- 【C】矩阵翻转(上下翻转、左右翻转)
- 数字左右翻转
- fliplr--矩阵左右翻转
- push 左右翻转动画
- matlab左右翻转图像
- Matlab与线性代数 -- 矩阵的左右翻转、上下翻转和矩阵的逆时针旋转90操作
- 传感器状态与二进制数
- 二进制数与汉诺塔问题
- 把一个十进制数的二进制形式翻转,并输出翻转后所对应的十进制数
- 十进制数与二进制数的转换
- 图像平移、上下翻转、左右翻转
- 输出一个字符串遇见‘ \0 ’停止并返回字符串字符的个数
- 宏在使用过程余函数的区别<1>
- 求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同
- 不使用(a + b) / 2这种方式,求两个数的平均值
- C/S and B/S Competition
- 左右翻转二进制数==》繁琐与精简
- 揭露函数所传递参数的本来面目
- 谈面向对象以及程序设计
- 使用可变参数列表实现求平均值的函数
- 简单的冒泡排序
- 编写程序将"hello-NOworld"变成"hello-world"
- 判断一个数或者一串字符串是不是回文数
- 指针数组与数组指针 和 函数指针与函数指针数组
- 调整数组使奇数全部都位于偶数前面