实现把一个无符号数的二进制位模式从左到右反转后输出。例如:在32位机器下,把25,0~011001变成100110~0

今天做了一道关于位运算的题。

题目:实现把一个无符号数的二进制位模式从左到右反转后输出。

例如:在32位机器下,25的二进制为0000 0000 0000 0000 0000 0000 0001 1001

       变成1001 1000 0000 0000 0000 0000 0000 0000 

即2550136832.

我采用的是移位来得出结果,具体代码如下:

#include<stdio.h>
unsigned int reverse_bit(unsigned int input) 
{
	unsigned int sum = 0;
	int n = 0;
	unsigned int result = 0;
	while(input)
	{
		result = input%2;
		sum = sum + (result<<(31-n));//每一位移位后相加
		input = input/2 ;
		n++;
	}
	return sum;
}
int main()
{
	unsigned int accept = 0;
	unsigned int input = 0;
	scanf("%d",&input);
	accept = reverse_bit(input);
	printf("%u",accept);
	return 0;
}

 

代码是从右向左取出每一个二进制,每取出一个向左移动相应的位数,最后相加。。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值