第九题:
判断一个数是否为2的幂次(例如1,2,4,8…..),不能使用循环。
参考代码:
#include <stdio.h>
int IsPower(
int n)
{
return 0 == (n & (n -
1));
}
int main()
{
printf(
"%d\n", IsPower(
4));
return 0;
}
PS: 其实在说到不能用循环的时候,我一般直接想到的就是位操作,稍微试一下与或非和异或就知道了
第十题:
下面代码打印的结果是多少?
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。