这个函数的返回值value的二进制位模式从左到右翻转后的值。

unsigned int reverse_bit(unsigned int value); 
这个函数的返回值value的二进制位模式从左到右翻转后的值。 

如: 
在32位机器上25这个值包含下列各位: 
00000000000000000000000000011001 
翻转后:(2550136832) 
10011000000000000000000000000000 
程序结果返回: 
2550136832 

第一种方法:

unsigned int reverse_bit0(unsigned int value)
{
	int i = 0;
	int bit = 0;
	unsigned int result = 0;
	for(i = 0; i<32; i++)
	{
		bit = value & 1;	//取出最低位
		value >>= 1;     //右移一位
		result += (bit<<(31 - i)); //每个bit位加起来
	}
	return result;
}

第二种方法:

《c和指针》

unsigned int reverse_bit2(unsigned int value)
{
	int i = 0;
	unsigned int result = 0;
	int count = 0;
	for(i = 1; 0 != i; i <<= 1)
	{
		count++;
		result <<= 1;  //左移位数
		if(value & 1)
		{
			result |= 1;   //该bit位是1,将result该位置为1
		}
		value >>= 1;   // 右移位数 
	}
	printf("count = %d\n",count);
	return result;
}

猜你喜欢

转载自blog.csdn.net/USA_AM_1966/article/details/83377180