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

猜你喜欢

转载自www.cnblogs.com/tenjl-exv/p/12897241.html