Онлайн компилятор C

#include <stdio.h> int is2pow(int n) { if (n % 2 == 0) return 1; if (n % 2 != 0) return 0; } int main() { int x; scanf("%d", &x); printf("%d", is2pow(x)); return 0; }
这段代码试图判断一个整数是否是2的幂次方,但逻辑有误。当前函数只检查了n是否能被2整除,这只能判断n是否为偶数,而不是2的幂次方。例如,6是偶数但不是2的幂次方,函数会错误返回1。

- 函数`is2pow`需要检查n是否严格大于0,并且n的二进制表示中只有一个1。可以思考如何利用位运算或循环来实现这个条件。
- 当前函数对n=0或负数的情况没有处理,这些情况应该返回0。另外,注意2的幂次方(如1,2,4,8...)的二进制特点。