深信服入职前编码训练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 更新:
不会再继续更新后面的练习题了,如今大家都在练习阶段,继续公布的话这个编程练习就失去意义了。
在练习过程中遇到问题大家可以多交流,这里就不再分享了。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号