这里要使用到&位运算符,想一下,
1 & 0 = 0;
1 & 1 = 1;
可以将该二进制数与1进行&运算,运算结果如果为真(1),二进制数中1的个数就加一,然后将二进制数右移一位,如此循环下去。
int num = 1000;
int count = 0;
for (count = 0; num != 0; num = num >> 1)
{
if (num & 1)
count++;
}
第二种解法,
1、num-1的结果实际上就是将num中最后一个1变为0,而最后一个1之后的都变为1
2、num & num-1实际上就是将num中最后一个1及之后的数都变为0
int num = 1000;
int count = 0;
for (count = 0; num != 0; num &= num - 1)
{
count++;
}