程序员应聘经典笔试题
一语句实现a是否为2的若干次幂的判断
【参考答案】
void main()
{
int a;
scanf(“%d”,&a);
printf(“%c”,(a)&(a-1)?’n’:’y’); // 若是打印y,否则n
}
这里很多同学可能不理解(a)&(a-1)?’n’:’y’的意思,翻译出来就是
if(a & (a-1)){
printf(“n”);
}
else{
printf(“y”);
}
有的初学者可能不知道&什么意思这里补充一下,&在C语言中可以代表是二进制的 与 运算(翻译就是and,同1为1,不同为0)
这里进行一个简单的验证,8的二进制是1000,8-1的二进制是0111,所以1000 & 0111结果是0000,if(0000)为假,所以执行else语句,所以8是2的若干次幂的。