【剑指offer15】二进制中1的个数(位运算),C++实现

原创博文,转载请注明出处!

# 本文是牛客网《剑指offer》刷题笔记

1.题目

# 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。例如,把9表示成二进制是1001,有两位是1。因此如果输入9,该函数输出2。

2.思路

# 把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作(循环次数等于二进制数中1的个数)。

举例:9的二进制是1001,1001-1之后是1000,1001和1000做与运算后得到1000;1000-1之后是0111,1000和0111做与运算后得到0000;循环执行了两次,9的二进制中有两个1。

3.code

# 返回值:整数中1的个数

# 参数:整数

  1 class Solution {
  2 public:
  3      int  NumberOf1(int n) {
  4          int count =0;
  5          while(n){
  6              ++count;
  7              n=n&(n-1);
  8          }
  9          return count;
 10      }
 11 };

 

posted @ 2018-03-08 11:18  wanglei5205  阅读(1192)  评论(0编辑  收藏  举报
levels of contents