题目描述:
给出一个整数,如何快速判断它是不是2的整数次方。
分析:
如果这个整数是2的整数次方,那他的二进制数中只有一位是1。
用上一道题中,N&(N-1)可以消掉一个1,如果它消掉一个1之后,等于0了,那他就是2的整数次方。
代码:
if((N&(N-1))==0)
{
cout<<"yes"<<endl;
}
else
coout<<"No"<<endl;
总结
关于N&(N-1)的适用,
它本身每次使用,消掉二进制中的一个1,
用一次判断是否为0,可以判断是否为2的整数倍
用多次,可以数清楚有多少个二进制中的1.