二进制中1的个数

二进制中1的个数

题目描述

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

C++中位运算符: 与&, 或|, 异或^, 左移<<, 右移>>

其中左移操作最右边补0, 右移操作最左边补与符号为相同的0或1

0101 << 2 = 0100

1101 >> 2 = 1111

0101 >> 2 = 0001

版本一: 由于正负关系, 不能右移操作数, 所以要左移标志为来进行与运算

class Solution {
public:
     int  NumberOf1(int n) {
         int res = 0;
         int bit = 1;
         
         while (0 != bit) {
             if (n & bit) {
                 res++;
             }
             bit = bit << 1;
         }
         
         return res;
     }
}; 

版本二: 详解见《剑指offer》P102

class Solution {
public:
     int  NumberOf1(int n) {
         int res = 0;
         
         while (n) {
             res++;
             n = (n - 1) & n;
         }
         
         return res;
     }
};
posted @ 2019-02-24 10:00  张飘扬  阅读(161)  评论(0编辑  收藏  举报