負の10進数を2進数に変換


6

私は-441という数字を2進数に変換しようとしていましたが、どうやってこれを達成できるかわかりません。

私は最初に441を2進数に変換しました:110111001 それから私はこの数の賛辞を取ることになっています:001000110 そして、私はその結果になるものを追加しなければならないでしょう:001000111

この演習では、10進数と16ビット数でバイナリ表現を指定する必要があると説明しています。そのため、数値の前にゼロを付けることができました。数字の前に1つ、これが当てはまるのはなぜですか。

-441を16ビット数に変換するにはどうすればいいですか?

ありがとうございました。

回答:


16

あなたは、正の数と負の数を区別する何かがなければならないことを忘れていたので混乱しています。

負でない数を8ビットで格納したいとしましょう。

  • 00000000 は0、
  • 00000001 1、
  • 00000010 2、
  • 00000011 3、
  • 00000100 4、
  • ...
  • 11111111 255です

そのため、0から255の範囲の数字を8ビットで格納できます。 255 = 2 8 - 1.(2は2進法の基数、8はビット数、0は0でカウントしたいので1が減算されます)

さて、あなたも負の数を保存したいとしましょう。どうすればそれを達成できますか。私たちはサインのために1ビットを捧げることができます。このビットが 0 それから私達は他の7ビットを正数、そうでなければ負数として解釈する。いくつかの操作が簡単になるため、署名に最上位ビットを使用するのが最善です。

  • 簡単なアプローチ: そのまま数字を読むだけです:

    • 00000001 == 1と 10000001 == -1
    • 01000010 == 66と 11000010 == -66
    • 01111111 == 127と 11111111 == -127
  • 補数: 任意の番号 x二項表現を否定すると、 -x。この意味は:

    • 00000001 == 1と 11111110 == -1
    • 01000010 == 66と 10111101 == -66
    • 01111111 == 127と 10000000 == -127
  • 2の補数: 任意の番号 xそのバイナリ表現を否定し、1を加えると、のバイナリ表現が得られます。 -x。この意味は:

    • 00000001 == 1と 11111111 == -1
    • 01000010 == 66と 10111110 == -66
    • 01111111 == 127と 1000001 == -127
    • 10000000 == -128

2の補数が最適なのはなぜですか?

  • それが最も広い範囲を持っているので:-128 ... 127、自明なアプローチと1の補数は-127 ... 127
  • ゼロは明確に定義されています。
    • 2の補数のみ 00000000 ゼロです
    • 些細なアプローチでは両方とも 00000000 そして 10000000 ゼロです
    • 両方のものを補完する 00000000 そして 11111111 ゼロです
  • 加算と減算は符号なしの数と同じであるため、CPUは符号付きの数を加算するための追加の命令を必要としません。

最上位ビットを符号ビット専用にすると、必要なビット数が分からないと数値をバイナリに変換できません。例えば、4ビットだとしたら、自明なアプローチでは-5という数は 11017ビットでは、 10001010001101 (7ビット長にゼロが埋め込まれた4ビット-5)は実際には13です(最上位ビットは0なので、正の値です)。

私はあなたのために宿題をするつもりはないが、私はあなたに一般的な助言を与えることができる:

変換する -xN ビット長2の補数表現:

  1. 変換する -x 2の補数を使用してバイナリに
  2. 左にゼロで埋めます N-1 長さ
  3. 左側に負の符号ビットを追加します。

私はあなたがこの答えから残りを理解できると思います。質問がある場合は、コメントを残してください。


1
うまく説明された
Alok Mishra

とても良い答えです。どうもありがとうございました。
Dennis Kassel

0

2の補数を取った後は、バイナリの最後に0を追加して10ビット表記にする必要があります。 注意が必要なのは、バイナリが負の整数であることを示すために符号付きビットを入れる必要があるということです。        (1)0001000111


1
スーパーユーザーへようこそ。きみの 回答 詳細から恩恵を受ける可能性があります。あなたの答えをより明確に説明するためにそれを編集してください。
Twisty Impersonator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.