-4

負の数に対するビット演算は次のとおりです。

#include <stdio.h>

main()
{
    int a = -20, b = 84;
    printf("%d", (a>>(a &b)));
}

-20 の 2 の補数は11002 進数で、84 は10000100です。のはずa & bです100が、答えは 68 で、全体の答えは -2 です。

誰かが私にこれを説明できますか?

4

2 に答える 2

3

Windows を使用している場合は、バイナリをサポートする電卓アプリが付属している必要があります。これは、信頼できる計算の優れた情報源です。Wordその中で、どちらが int であるかを選択できます。

負の数は、左側のすべてのビットが 1 であることによってメモリに記録されます。したがって、-20 は

  1111-1111-1110-1100
= 0xFFEC

そして84は:

  0000-0000-0101-0100
= 0x0054

And は、渡された 2 つの数値を比較し、各ビットをチェックするビット単位の操作です。両方のビットが 1 の場合、結果のビットは 1 です。それ以外の場合はゼロです。そう

  1111-1111-1110-1100
& 0000-0000-0101-0100
= 0000-0000-0100-0100
= 68
于 2013-04-20T17:13:23.183 に答える