【发布时间】:2016-06-24 14:22:33
【问题描述】:
我有以下代码仅检查 uint64_t 是否为偶数,我打算使用按位 AND 操作进行检查,但它似乎不起作用。
这是我认为首先会起作用的代码:
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++){
uint64_t s,d;
scanf("%llu %llu",&s,&d);
//try for x
uint64_t x;
bool stop = false;
x = s + d;
printf("%llu",x&1ULL); \\ This prints 0 when the number is even but
if(x&1ULL==0ULL){ \\ This check always returns false
printf("%llu",x);
x/= 2;
如果数字是奇数或偶数,此代码始终打印出 0 或 1,但 if 语句始终返回 false。我究竟做错了什么?谢谢
【问题讨论】:
-
如果您不确定运算符的优先规则,请在括号中加上。另外,如果你确定的话。
-
如果这是 C++,为什么不使用
std::cin?这是 100% 的 C 代码。 -
@tadman 有些人喜欢 iostream,有些人讨厌它,有些人又爱又恨。使用旧的 api 没有错。
-
您遇到了运算符优先级问题。
-
@tadman 在这种情况下,这个程序是用于编程竞赛的,所以我使用 printf、scanf 和按位运算,因为它们要快得多,不过你是对的,一般情况下我会使用 cin
标签: c bit-manipulation bitwise-operators bitwise-and uint64