剑指offer-11 二进制中1的个数

左心房为你撑大大i 提交于 2020-02-12 23:07:31

剑指offer-11 二进制中1的个数

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

题目类别

二进制计算

解题思路

代码鲁棒性;输入是int 可能正数,负数,零;
首先思路是n & 1,然后按位右移n,但是n可能为负数就造成死循环
其次思路是,每次左移1,在分别与n作与运算,但是int为32位因此要判断32次
最后采用(n+1)& n 的方式,每次去掉最右边1.达到循环1个数次运算

具体实现

class Solution {
public:

     int  NumberOf1(int n) {
         int count = 0;
         while(n){
             count++;
             n = ( n-1 ) & n;
         }
         return count;
     }
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!