看到别人的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;
博客分享了两道面试题及答案。一是求n中1的个数,代码通过循环 `m &= m - 1` 实现,循环次数为m二进制中1的个数;二是判断x是否为2的若干次幂,利用 `(i & (i - 1))` 进行判断。
看到别人的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;
1017
1620

被折叠的 条评论
为什么被折叠?