4.将一个32位的无符号的整数,实现高低位反转

/*
   将一个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;
}
发布了10 篇原创文章 · 获赞 0 · 访问量 532

猜你喜欢

转载自blog.csdn.net/TurboTab/article/details/104606923