- 也许你会想到不断将这个数除以2
- 本次方法利用二进制的巧妙之处
- 一个不为0的十进制数的二进制数有且只有一个1,所以若该数是二进制数,那么它减1与本身进行按位与(&)运算结果为0
#define is_power_of_2(n) ((n) && !((n) & (n - 1)))
- 测试
#include
#define is_power_of_2(n) ((n) && !((n) & (n - 1)))
int main() {
for (int i = 1; i <= 1 << 20; i++) {
is_power_of_2(i) && printf("%d\n", i);
}
return 0;
}