这是昨天晚上某号称中国创新力最强的应用层网络设备供应商的一题笔试编程题。题目看似简单,总的来说吧,会的人不难,不会的人无从下手。题目如下:
题目:
程序如下:编写函数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()循环