C语言,请问这个代码该怎么改?

请问位运算符可以这么用吗?我写的这个运行结果都是错误的,请问要怎么改……
#include"stdio.h"
int main(void)
{
int n;
int flag = 0;
while(scanf("%d",&n) != EOF){
if(n&(n-1) == 0)
flag = 1;
if(n % 1024 == 0)
flag = 1;
if(flag == 1)
printf("Yes\n");
else
printf("No\n");
}
}
Description
乔治·斯蒂比兹(George Stibitz ,1904-1995)被称为数字计算机之父,几乎在相同时期,他与德国工程师楚泽分别独立研制出了二进制数字计算机。

    所以对于程序员来说21024是两个特殊的数字,现在给你一个数,问你它是否是2n次方(n可取0和任何正整数)或它是否是1024的倍数。

Input

    多组输入,每行读一个正整数x(1<=x<=40000)。

Output
如果n满足题目里的任意一个条件,则输出“YES”,否则输出“NO”,行末无多余空格,并需要换行。

Samples
input
1
2
3
4
5
1024
2048
3072
output
YES
YES
NO
YES
NO
YES
YES
YES

1.首先,&的优先级比==低,所以是先算(n-1)==0再跟n做与运算
2.即使你加了括号,这算法也是错的,n=1,n-1=0,1&0=0,1是2的倍数吗,你要判断n>1才行