第九题:
判断一个数是否为2的幂次(例如1,2,4,8…..),不能使用循环。
参考代码:
#include <stdio.h>
int IsPower(int n)
{//判断一个数是否为2的幂次,如果是返回1,否则返回0
return 0 == (n & (n - 1));
}
int main()
{
printf("%d\n", IsPower(4));
return 0;
}
PS: 其实在说到不能用循环的时候,我一般直接想到的就是位操作,稍微试一下与或非和异或就知道了
第十题:
下面代码打印的结果是多少?
#include <stdio.h>
int func(int x, int y)
{
return (x & y) + ((x ^ y) >> 1);
}
int main()
{
printf("%d\n", func(545, 455));
return 0;
}
答案:500
PS: 通过观察我们可以发现x&y的结果为x和y相同位和的一半,x^y的结果为x和y的不同位,右移相当于除以2,所以最后结果为:(545 + 455)/ 2 = 500。