第一种,位运算。奇数和1相与结果为1,偶数和1相与结果为0.
奇数肯定不是2的幂,偶数就除2继续判断,一直到除2结果为1为止
#include<stdbool.h> bool poweroftwo(int n ) { if(n <= 0) return false; while(n > 0) { if(n & 1 == 1) break; //奇数就结束 n = n>>1; } if(n > 1) //奇数结束后的结果都>1 return false; else //偶数结束的结果=1 return true; }
第二种更简单:要验证是否是2的幂,就一直除2,看最后是否为1
bool poweroftwo(int n ) { while(n > 0 && n % 2 == 0){ n = n / 2; } if(n == 1) return true; return false; }