二进制中1的个数

Posted 张飘扬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制中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;
     }
};

以上是关于二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

编写代码,求一个整数在内存中的二进制中1的个数

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

最强解析面试题:二进制中 1 的个数「建议收藏!炸!」

最强解析面试题:二进制中 1 的个数「建议收藏!炸!」

二进制表示中1的个数

二进制中1的个数的多种解法解析以及完整c语言代码