-4

2 つの数値 a と b があり、どちらも 64 ビットです。

コード:

a = a|b;

if(!(a&b)){ }

上記のシナリオでは、b の 34 番目のビットがオンで、a のいくつかのビットがオンになっています。したがって、状況によっては !(a&b) は 0 になるはずですが、コードが if ループに入っていて、これは間違っています。問題は、!(a&b) が 0 ではなく 1 を与えていることです。理由はありますか?

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 に答える