3 ビットは最大 7 (4 + 2 + 1) まで保持できます。ビット単位の演算を使用してこれを計算しようとしています。
3 is 0b011
~3 is 0b100
ビット単位の OR を実行すると、0b111 (つまり 7) が期待されます。代わりに私は得る
int result = (~3) | 3;
printf("%i\n", result);
-1
私は何を間違っていますか?
3 ビットは最大 7 (4 + 2 + 1) まで保持できます。ビット単位の演算を使用してこれを計算しようとしています。
3 is 0b011
~3 is 0b100
ビット単位の OR を実行すると、0b111 (つまり 7) が期待されます。代わりに私は得る
int result = (~3) | 3;
printf("%i\n", result);
-1
私は何を間違っていますか?
あなたはすべてを正しく行っています。N | ~N
結果は、すべて 1 で構成される 2 進数表現の数値になります。このような数は、負の数の 2 の補数表現として解釈さ-1
れます。
コードでこれを行った後
int result = (~3) | 3;
この行を追加
result= result & 0x07
これにより、期待する答えが得られます。