有两个数字 a 和 b,都是 64 位。
代码:
a = a|b;
如果(!(a&b)){ }
现在,在上述场景中,b 的第 34 位打开,而 a 的一些位打开。 因此,根据情况 !(a&b) 应该结果为 0,但代码进入了 if 循环,这是错误的。问题是 !(a&b) 给出的是 1 而不是 0。有什么原因吗?
最佳答案
因为您不想创建 SSCE ,我给你做了一个:
#include <stdio.h>
int main(void) {
unsigned long long a = 42, b = 1ULL << 33;
a = a|b;
if(!(a&b))
printf("!(a&b)\n");
else
printf("(a&b)\n");
return 0;
}
并在ideone处运行它。它按预期输出 (a&b)
。您的问题不在于您向我们展示的代码。
关于c - 64 位数字的 NOT 在 c 中给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176601/