将一个16进制的数的二进制位反序

      这是昨天晚上某号称中国创新力最强的应用层网络设备供应商的一题笔试编程题。题目看似简单,总的来说吧,会的人不难,不会的人无从下手。题目如下:

题目:

程序如下:编写函数reverse(),将val(32位无符号整数)的二进制位反序。比如,如果val的二进制表示为1011000011111111,反序后的val的二进制表示为 1111111100001101.

                   输入描述:16进制的一个无符号数。           输出描述:16进制的一个无符号数

#include <stdio.h>
#include <string.h>

unsigned int reverse(unsigned int num)
{
	int y = 0;
	for (int i = 0; i < 8 * sizeof(num); i++)
	{
		y = y << 1 | num & 1;
		num >>= 1;
	}
	return y;
}

int main(int argc, char *argv[])
{
	unsigned int num = 0;
	unsigned int ret = 0;

	if (1 != fscanf(stdin, "0x%x", &num)) {
		fprintf(stderr, "input error\n");
		return 0;
	}
	ret = reverse(num);
	printf("%08x\n", ret);
	return 0;
}

如果输入 :0x1,则输出 80000000

说明:主要功能在reverse()函数实现。核心的地方就在一个for()循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值