标签: 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.任何原因?
答案 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)。您的问题不在您向我们展示的代码中。
(a&b)