深信服入职前编码训练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 更新:

不会再继续更新后面的练习题了,如今大家都在练习阶段,继续公布的话这个编程练习就失去意义了。

在练习过程中遇到问题大家可以多交流,这里就不再分享了。

posted @ 2020-05-15 21:18  T丶jl  阅读(468)  评论(0编辑  收藏  举报