二进制按位翻转
来源:互联网 发布:cocos2dx安装 mac 编辑:程序博客网 时间:2024/06/01 08:16
二进制按位翻转
把一个32位整数按位反转,即第1位转到第32位,第2位转到第31位,依次下去。
算法实现: 0XAAAAAAAA之类的称为掩码
第一行以1位为一单元,奇偶单元进行交换; (交换32位整数的奇数位和偶数位)
第二行以2位为一单元,奇偶单元进行交换;
第三行以4位为一单元,奇偶单元进行交换;
第四行为8位为一单元,奇偶单元进行交换;
第五行以16位为一单元,奇偶单元进行交换。
至此,32位反转完成,算法结束。
#include <stdio.h>void print(unsigned int data){int count = 0;int k = sizeof(data)*8 - 1;/*将1依次左移31-0位至最低位,得出其31-0位,是1则输出1,是0则输出0*/for (; k>=0; --k){printf("%d", ((data >> k) & 1));++count;if (count % 8 == 0){printf(" ");}}printf("\n");}unsigned int bitReverse(unsigned int data){/*data = ((data >> 1) & 0X55555555) | ((data << 1) & 0XAAAAAAAA);print(data);data = ((data >> 2) & 0X33333333) | ((data << 2) & 0XCCCCCCCC);print(data);data = ((data >> 4) & 0X0F0F0F0F) | ((data << 4) & 0XF0F0F0F0);print(data);data = ((data >> 8) & 0X00FF00FF) | ((data << 8) & 0XFF00FF00);print(data);data = ((data >> 16) & 0X0000FFFF) | ((data << 16) & 0XFFFF0000);print(data);*/data = ((data & 0XAAAAAAAA) >> 1) | ((data & 0X55555555) << 1);print(data);data = ((data & 0XCCCCCCCC) >> 2) | ((data & 0X33333333) << 2);print(data);data = ((data & 0XF0F0F0F0) >> 4) | ((data & 0X0F0F0F0F) << 4);print(data);data = ((data & 0XFF00FF00) >> 8) | ((data & 0X00FF00FF) << 8);print(data);data = ((data & 0XFFFF0000) >> 16) | ((data & 0X0000FFFF) << 16);print(data);return data;}int main(void){unsigned int data;while (scanf("%u", &data) != EOF){printf("0X%08X\n", data);print(data);data = bitReverse(data);printf("0X%08X\n", data);printf("%#08X\n", data); /*和上个结果一样,C和指针P314*/}return 0;}
0 0
- 二进制按位翻转
- 二进制按位翻转
- 二进制形式按位翻转后的Byte值
- 二进制翻转
- 二进制翻转
- 二进制翻转
- leetcode 190. Reverse Bits-二进制翻转|位运算
- 按位翻转数据算法
- 整数的二进制翻转
- 【c语言】二进制翻转
- 采用位运算,如果想将整数的二进制某一位翻转可采用id^=(1<<x)(x代表要翻转的位置)
- 【LeetCode】Reverse Bits 翻转二进制
- leetcode_190. Reverse Bits 比特流反转,求十进制数的32位二进制串翻转后对应的十进制数,二进制与十进制转换
- 将字符串n位翻转
- 翻转64 32 16 位
- 翻转整型值bit位
- 【C语言位运算的应用】如何按bit位翻转一个无符号整型
- 二进制与位运算
- Android Intent调用 Uri的使用几种格式
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构
- 设计模式——策略模式(Strategy) 笔记
- 百度校园招聘(笔试题集)
- 数字证书
- 二进制按位翻转
- Geotools使用-2,Maven的替代
- 1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换.
- dthdfjhfgjfjghjvghhjfhjfh
- 第一个Demo学到的东西(一)
- 阿拉伯数字的金额转换成中国传统的形式
- java语言的集合框架
- 将所有div下的所有li的html()值设为"哈哈",当点击的时候设为"我被点击了",其余没有点击的依然设为“哈哈”
- 机器学习中的相似性度量