据上一篇求二进制中1的个数的思路拓展:如何判断数字n是否为2的幂次方?
2的幂次方有一个特点,仅有一个1,大家很容易想到使用n&(n-1)去判断count是不是1就可以了
但这还是太麻烦!请看以下代码
int main()
{
int n = 0;
scanf("%d", &n);
//公式n&(n-1)都会去掉最右边的1,只有一个1的情况下,只要&上一次看是否变为0即可
if ((n & (n - 1)) == 0)
{
printf("%d是2的幂次方\n", n);
}
return 0;
}
总结:
相同的问题,总能写出不一样的代码来解决,日常思考问题也应该多想几种解法,去挑战代码优化。这非常有利于改进代码思维,我们大多数时候只能重复运用已经学会的知识,而不能快速找到创新的想法,所以要多看看其他人写的好代码,我们才能从中汲取养分提升自己的代码水平。