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

剑指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;
     }
};
发布了38 篇原创文章 · 获赞 6 · 访问量 8553

猜你喜欢

转载自blog.csdn.net/qq_36400206/article/details/104284371