/*
将一个32位的无符号的整数,实现高低位
反转,比如31反转后再0位,30位反转后
在第1位......(不能定义新的变量)
*/
// 32位高低位反转
void Test04_ReverseMask(void)
{
unsigned int a = 0xAAAAAAAA;
printf("before a = %#x\n", a);
// 交换相邻的位
a = ((a>>1)&0x55555555)|((a&0x55555555)<<1);
// 交换相邻的两位
a = ((a>>2)&0x33333333)|((a&0x33333333)<<2);
// 交换相邻的四位
a = ((a>>4)&0x0F0F0F0F)|((a&0x0F0F0F0F)<<4);
// 交换相邻的八位
a = ((a>>8)&0x00FF00FF)|((a&0x00FF00FF)<<8);
// 交换相邻的16位
a = (a>>16)|(a<<16);
printf("later a = %#x\n", a);
}
int main(int argc, const char *argv[])
{
Test02_ReverseMask(); // 打印结果:0X55555555
return 0;
}
4.将一个32位的无符号的整数,实现高低位反转
猜你喜欢
转载自blog.csdn.net/TurboTab/article/details/104606923
今日推荐
周排行