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;
时间: 2024-10-07 09:28:23