示例如下
0x00111111 --> 0x88888800
===>
0b0001 0001 0001 0001 0001 0001 0001 0001 //0x11111111
转换后
0b1000 1000 1000 1000 1000 1000 1000 1000 //0x88888888
将int类型的数的 二进制数,高低位翻转
问题如下:
将一个unsigned int 类型的数值,第31位 跟 第0位交换,第30位 跟 第1位交换。。。依次类推
之前写的:8位二进制数 的 翻转<点击跳转>是下面代码实现的基础
#include <stdio.h>
int main()
{
unsigned int a = 0x111111;
printf("%#x \n",a);
a = ((a&0xaaaaaaaa)>>1)|((a&0x55555555)<<1);//交换相邻位
a = ((a&(0xcccccccc))>>2)|((a&(0x33333333))<<2);//交换相邻的两位
a = ((a&(0xf0f0f0f0))>>4)|((a&(0x0f0f0f0f))<<4);//交换相邻的四位
a = ((a&(0xff00ff00))>>8)|((a&(0x00ff00ff))<<8);//交换相邻的八位
a = (a>>16)|(a<<16);//交换相邻的十六位
printf("%#x \n",a);
return 0;
}