isPowerof(2)
中的 main()
会导致预期);错误 ...这有什么问题?
#include<stdio.h>
#define isPowerof2(n) (!(n & (n-1))
int main(){
int n,p;
clrscr();
printf("\nEnter the number to be Checked:");
scanf("%d",&n);
isPowerof2(n);
printf("%d",p);
getch();
}
答案 0 :(得分:3)
你错过了另外一个括号:
#define isPowerof2(n) (!(n & (n-1)))
^
附注:如果您不必使用宏,请改用函数。
答案 1 :(得分:1)
您打开3个括号,但只关闭2个。
#define isPowerof2(n) (!(n & (n-1)))
但还有另一个错误。您应该在宏参数周围添加括号,否则您可能会有惊喜。
#define isPowerof2(n) (!((n) & ((n)-1)))
编辑:错误示例
调用
isPowerOf2(34 >> 1) which is not a power of 2
将失败,因为在没有括号的情况下,它将被扩展为
(!(34 >> 1 & (34 >> 1-1)))
(!(17 & (34 >> 0)) // shift is lower priority than subtraction
(!(17 & 34))
(!0)
1
这显然是假的。
固定宏的实际值是
(!((34 >> 1) & ((34 >> 1)-1)))
(!(17 & (17-1)) // shift is lower priority than subtraction
(!(17 & 16))
(!16)
0