算法:二进制中1的个数

Posted 爱吃土豆的男孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:二进制中1的个数相关的知识,希望对你有一定的参考价值。

1 int NumberOf1(int n) {
2         int count = 0;
3         while(n!= 0){
4             count++;
5             n = n & (n - 1);
6         }
7         return count;
8     }

算法核心部分就是

n = n & (n - 1);
着行代码可以吧n的最后一位1变成0,负数用补码表示同样可以。
举个例子:二进制数n 为 1100,n-1 = 1011
n&n-1 = 1000 n的第三位是1,运算后变成了0;
如果n为负数同样,第一位为符号位,设n = 11000
n = n&(n-1)运算一次,n = 10000;
运算两次 n = 00000;

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

经典算法——二进制中1的个数

算法-求二进制数中1的个数

第14个算法 二进制中1的个数

说一说,求一个正整数的二进制中0的个数

统计整数中1的个数

每日算法刷题Day16-和为S的两个数字数字排列二进制中1的个数