前言
我们在处理统计二进制中1的个数此类问题时,通常需要多次循环去读取每一位的数值。今天我发现了一个很高效的方法去寻找每一个1,在这里向大家分享一下。
正文
这里我们用到一个n=n&(n-1)便可以快速地统计二进制中1的个数。
接下来我简单介绍一下原理:
n = 1111
n-1= 1110
n=n&(n-1)
n = 1110
如此循环计算,每次都可将一位1变成0,直到n=0便可得到二进制中1的个数。
示例代码如下:
int NumberOf1(int n) {
int num = 0;
while (n) {
n = n & (n - 1);
num++;
}
return num;
}