これは純粋に学術的ですが、私はCで、単純な真理値表を作成しました:C否定演算子プリント予期しない結果
#include <stdio.h>
int main() {
for(int j=0; j<=2; j++) {
int bitB = (j&1);
printf("~%d = %d\n", bitB, ~bitB);
}
return 0;
}
は、端末収率で実行:GDBで
~1 = -2
~0 = -1
デバッグprintfに改行を設定すると、私が期待しているものが得られます。
(gdb) print bitB
$5 = 1
(gdb) cont
Continuing.
~1 = -2
(gdb) x/xw &bitB
0xbffff3d8: 0x00000000
なぜプログラムがアウトプットですかtは負の数を示しますか?
[mcve]を入力してください。表示されたコードはこの出力を生成しません。そしてその質問は意味をなさない。あなたはリンゴとオレンジを比較しますか? 'x/xw'は出力が異なる全く異なるコマンドです。なぜあなたのコードのように 'p〜bitb'をしないのですか? – Olaf
2の補数と負の整数の表現方法を調べます。2の補数のために調整 – kaylum
: の#include のint main()のための{ (int型J = 0であり、j <= 1; J ++){ unsigned int型BITB =(J &1); のprintf( "〜%のD = %u \ n "、bitB、〜(bitB - 2); } return 0; } –