不是64位数字在c中给出错误的结果

时间:2013-06-18 18:50:51

标签: c 64-bit bit-manipulation bit-shift

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

代码:

a = a | b;

如果((A&安培;!B)){ }

现在在上面的场景中,b的第34位开启,a有一些位。 所以,根据情况!(a& b)应该导致0但是代码进入if循环是错误的。问题是!(a& b)给出1代替0.任何原因?

1 个答案:

答案 0 :(得分: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)。您的问题不在您向我们展示的代码中。