0

1 の補数 Octal(24)-Hex(4B) を使用して次の減算を行い、2 進数の答えを出したい

Octal(24) は 10 進数で 20、Hex(4B) は 10 進数で 75 です。

20->10100 75->1001011

75 0110100 の 1 の補数を取り、20 に追加します。

10100 +0110100 =1001000

結果001000 + 1 = 001001でキャリーを追加しますが、これは間違っています

どこが間違っていますか?

私はここで初めてです。入力方法に誤りがあれば申し訳ありません。

4

1 に答える 1

0

あなたのバージョンにはいくつかの小さな間違いがあります。正しい解決策を示してから、間違いを示しましょう

8 進数の 24 と 16 進数の 4B があります。どちらもバイナリに変換するのはかなり簡単です。

各 8 進数は 3 桁の 2 進数を表します。

 2   4 
+++ +++
010 100

各 16 進数は 4 桁を表します。

 4    B 
++++ ++++
0100 1011

次に、補数を構築します。

~01001011
 ---------
 10110100

を追加する必要があります。それ以外の場合は、2 つのゼロを取得します。(+0 => 00000000、-0 => 11111111)。これは実際には 2 の補数になりますが、0 境界を越えるときに奇妙な結果が必要でない限り必要です。

 10110100
+00000001
---------
 10110101

これで補完が完了しました。次のステップは、両方の数値を追加することです

 00010100 #The Octal 24
+10110101 #The complement
---------
 11001001

最初の桁は 1 で、負の値です (20 - 75 を行ったので予想どおり)。したがって、逆にする必要があります。

最初に 1 を引きます。11001000
次に、もう一度反転します00110111
。これは 10 進数の 55 です。したがって、11001001 は 10 進数の -55 です。
20 - 75 = -55
出来上がり、完了です :)

最初の小さな注意: 0x4B (= Hex 4B) をバイナリ形式に変換する際に小さな間違いを犯しました。1桁間違っています:)

また、追加するのを忘れていました。それから、あなたは私がここにいない奇妙なことをしました:

結果001000 + 1 = 001001でキャリーを追加しますが、これは間違っています

また、固定サイズの数値を使用しなかったため、結果が負かどうかを判断できませんでした。ここでは 8 ビットに固執しました (8 進数から 2 進数への変換中を除く)。(8 ビットの場合、数値の範囲は -127 から +128 になることに注意してください。) そして最後に、負の数値が表示されないため、プロセスを元に戻しませんでした。

この説明がお役に立てば幸いです:)

于 2013-09-29T17:41:01.003 に答える