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

题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
 
解题思路:
方法一:n&flag   其中flag为1  然后每次与之后flag=flag<<1;这种方式是为了避免负数导致出现的死循环
 
方法二:n&(n-1)  此时是将n的右面最后一位1变为0,也就是去掉了一个1,重复操作直至n为0
 1 #include <iostream>
 2 using namespace std;
 3 class Solution {
 4 public:
 5      int  NumberOf1(int n) {
 6         int count = 0;
 7         while(n)
 8         {
 9             n = n & (n-1);
10             count++;
11         }
12         return count;
13      }
14 };
15 int main()
16 {
17     int n;
18     while(cin>>n)
19     {
20         Solution s;
21         cout<<n<<"的二进制中包含1的个数为:"<<s.NumberOf1(n)<<endl;
22     }
23     return 0;
24 }

程序运行结果如图:

posted @ 2017-05-10 14:44  qqky  阅读(212)  评论(0编辑  收藏  举报