深信服入职前编码训练21题--05
题目描述:
编写函数reverse,将val(32位无符号整数)的二进制位反序。比如,如果val的二进制表示为1011000011111111,反序后val的二进制表示为1111111100001101。
输入描述:
16进制的一个无符号整数
输出描述:
16进制的一个无符号整数
示例1
输入:0x1输出:80000000
分析:直接对32位二进制数据进行处理,从最低位开始,将每一位转移到对应的位置上。
直接看解答代码的第8-10行。
解答:
1 #include <stdio.h>
2 #include <string.h>
3
4 unsigned int reverse(unsigned int num)
5 {
6 //TODO:
7 unsigned int ans = 0x00;
8 unsigned int bit = 0x01;
9 for(int i=0; i<32; ++i)
10 ans |= ((bit<<i)&num)>>i<<(31-i);
11 return ans;
12 }
13
14 int main(int argc, char *argv[])
15 {
16 unsigned int num = 0;
17 unsigned int ret = 0;
18
19 if (1 != fscanf(stdin, "0x%x", &num)) {
20 fprintf(stderr, "input error\n");
21 return 0;
22 }
23 ret = reverse(num);
24 printf("%08x\n", ret);
25 return 0;
26 }
20200528 更新:
不会再继续更新后面的练习题了,如今大家都在练习阶段,继续公布的话这个编程练习就失去意义了。
在练习过程中遇到问题大家可以多交流,这里就不再分享了。