今天在阅读《程序员面试宝典》这本书的时候看到了,这么一段程序代码:
#include<iostream>
using namespace std;
int func(int x)
{
int count = 0;
while(x)
{
count++;
x = x&(x-1);
}
return count;
}
int main()
{
cout << func(9999) << endl;
return 0;
}
相信很多C++刚入们的“菜鸟”们,看到这段程序后会准备纸和笔好好的演算下这段代码的运算过程(本人就属于这一范畴:))。其实,在演算的过程中,大家就会发现一个规律:每当func()里的循环执行一次的时候,实参的二进制表示就会少一个“1”。没错!这段代码的功能就是返回实参(如,“9999”)的二进制表示中“1”的个数。在此希望与大家分享。