括号的使用规范:怎样用一行语句判断一个整数是否为2的幂次,请用C语言写

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 17:09:52
一道面试题
一楼的答案不好,我见过一个很巧妙的方法,问题我写错了 ,是用一个语句解决这个问题,不是用一行。只记得算法的效率很高,很巧妙,好像用了逻辑与。
我想到了!!!
(x-1) xor 0+1==x

2的幂次有个特点,就是2的幂次值在系统里二进制存储的时候1的个数为1

bool func(long n)
{
int p=0;
for (int i=0;i<32;i++,n>>=1) if(n&1) p++;
return (p==1);
}
复杂度O(1),位运算应该很快了
我想知道是什么地方的面试题?

要是就用一行就for(int i=0,p=0;i<32;p+=n&1,i++,n>>=1);return (p==0)

再好的想不出了

cout<<( (n-1)&n?false:true )<<endl;