• 无符号整数翻转函数实现reverse_bits(unsigned int value)


    题目描述:

      题目要求是:unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如,在32位机器上,25这个值包含下列各个位:

      00000000 00000000 00000000 00011001

    函数的返回值应该是2 550 136 832,它的二进制位模式是:

      10011000 00000000 00000000 00000000

    要求是:不能让函数依赖于机器上整型数值的长度。

    答案代码以及解释:

      题目看上去是比较简单的,不知道大家是怎么想的。下意识的第一想是从这个value的最右边处理,但遇到的问题是不知道该处理到什么时候停止。因为题目说不能假设unsigned int的长度。那你说怎么办?不看答案,各位怎么想?

     

      下面是书上摘抄的答案,个人加了几句注释

     1 unsigned int
     2 reverse_bits(unsigned int value)
     3 {
     4     unsigned int answer;
     5     unsigned int i;
     6     
     7     answer = 0;
     8     
     9     /*把一个unsigned int 数字1一直左移,直到它变成全0的时候,也就得到了该机器内unsigned int的长度*/
    10     for (i = 1; i != 0; i <<= 1)
    11     {
    12         answer <<= 1;
    13         if (value & 1) { answer |= 1; }
    14         value >>= 1;
    15     }
    16     
    17     return answer;
    18 }

      个人觉得第10行的代码是比较妙的,不知道大家怎么想,大家是怎么解决这个问题的。

     

    Reference

    《C和指针》 人民邮电出版社 P89 3题

  • 相关阅读:
    【2021-04-15】台上一分钟,背后十年功
    【2021-04-14】买了人生中的第一个车位
    计算机网络实验部分
    乘积最大子数组
    计算各个位数不同的数字个数
    周总结
    最长回文子序列
    最长回文串
    回文子串
    拼图
  • 原文地址:https://www.cnblogs.com/ziyoudefeng/p/2685112.html
Copyright © 2020-2023  润新知