计算一个整数二进制位中1的个数

来源:互联网 发布:淘宝买手机售后保修 编辑:程序博客网 时间:2024/05/17 21:47


        题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如8的二进制形式是1000,有1位是1,所以输入8,该函数应该输出1

     可以看出这是一道考察位运算的题目。

    (1)很简单的思路来判断一个数二进制位是不是1,先判断该数右边一位是否为1,然后将该数右移一位,采用相同逻辑判断是否为1,直到该数为0则停止。判断某位是否为1,我们可以想到很简单的办法就是与上1,判断&1后的结果是否为1。基于这个思路,我们可以很轻松的写出如下代码

    

    可以发现这种解法当遇到负数时,就会陷入死循环

    (2)不能将输入的数右移,那我们可以考虑将1不断左移,来判断

      

    可以看出这种解法循环的次数是32次,效率较低

    (3)把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变为0,那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。基于这种思路可以写出如下的代码

          

    基于这种思路,循环的次数正好是数据中1的个数,有效减少了循环次数

阅读全文
0 0
原创粉丝点击