負の数に対するビット演算は次のとおりです。
#include <stdio.h>
main()
{
int a = -20, b = 84;
printf("%d", (a>>(a &b)));
}
-20 の 2 の補数は1100
2 進数で、84 は10000100
です。のはずa & b
です100
が、答えは 68 で、全体の答えは -2 です。
誰かが私にこれを説明できますか?
負の数に対するビット演算は次のとおりです。
#include <stdio.h>
main()
{
int a = -20, b = 84;
printf("%d", (a>>(a &b)));
}
-20 の 2 の補数は1100
2 進数で、84 は10000100
です。のはずa & b
です100
が、答えは 68 で、全体の答えは -2 です。
誰かが私にこれを説明できますか?
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