看到别人的blog里面有道这样的面试题,答案如下(求出n中1的个数):
int count=0;
for (register u_long m = n;m != 0;m &= m - 1) count++;
只用一行,而且循环次数(=m二进制中1的个数)很少.
同样一语句实现x是否为2的若干次幂的判断
int i = 512;
cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
看到别人的blog里面有道这样的面试题,答案如下(求出n中1的个数):
int count=0;
for (register u_long m = n;m != 0;m &= m - 1) count++;
只用一行,而且循环次数(=m二进制中1的个数)很少.
同样一语句实现x是否为2的若干次幂的判断
int i = 512;
cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;