• 深信服入职前编码训练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
    ");
    21         return 0;
    22     }
    23     ret = reverse(num);
    24     printf("%08x
    ", ret);
    25     return 0;
    26 }

     

     

    20200528 更新:

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

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

  • 相关阅读:
    第二阶段冲刺01
    第十三周进度条
    构建之法阅读笔记5
    水王2
    购买一批书的最低价格
    第十二周进度条
    个人工作总结08
    个人工作总结07
    人机交互设计分析之搜狗输入法
    第八周的学习进度条
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/12897241.html
Copyright © 2020-2023  润新知