-4

有两个数字 a 和 b,都是 64 位。

代码:

a = a|b;

if(!(a&b)){ }

现在在上面的场景中,b 的第 34 位是打开的,并且 a 有一些位打开。因此,根据情况 !(a&b) 应该导致 0 但代码进入了错误的 if 循环。问题是 !(a&b) 给出的是 1 而不是 0。有什么原因吗?

4

1 回答 1

1

由于您不想制作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)按预期输出。您的问题不在您向我们展示的代码中。

于 2013-06-18T19:30:25.087 回答