2011-01-18 12 views
4

「-128」をバイナリに変換したいとしましょう。符号付きバイナリに小数点を変換する

私が理解から、私は、 "128" のバイナリ表現を取得するビットを反転して、それで= 10000000

128を1

を追加するので、 "逆" 01111111

ですだから "01111111" + "1" = "10000000"は "-0"ですね。

私の教科書はこれをとても簡単に思えますが、間違っていることを理解できません。助けてくれてありがとう。

答えて

7

いいえ、それは間違いなく-128です(とにかく2の補数で、あなたがネガティブな数字についてのあなたの説明を話しています)。負の数の符号/大きさの表現は唯一-0です。

2つの表現の詳細については、this answerを参照してください.3つめの表現にはCの補数もありますが、そこからスニペットをコピーしてできるだけ自己完結型にします。


は正の数の負の表現を取得するには、あなた:

  • 反転すべてのビットは、2の補数のための1を追加します。
  • 1の補数のすべてのビットを反転します。
  • 符号/振幅の符号ビットを反転します。あなたは以下の表にこれを見ることができます

number | twos complement  | ones complement  | sign/magnitude 
=======|=====================|=====================|==================== 
    5 | 0000 0000 0000 0101 | 0000 0000 0000 0101 | 0000 0000 0000 0101 
    -5 | 1111 1111 1111 1011 | 1111 1111 1111 1010 | 1000 0000 0000 0101 

あなたがいない128で8ビットの2の補数があることを認識しておく必要があり、最大値は127

です数字は「賢い」ものが発生した場所を中心点がある渡し

00000000 -> 0 
00000001 -> 1 
: : 
01111110 -> 126 
01111111 -> 127 
10000000 -> -128 
10000001 -> -127 
: : 
11111110 -> -2 
11111111 -> -1 

8ビットのラップアラウンドで(例えば)100-1のビットパターンを追加すると、自動魔法のあなたに99を与えるので:

100+ 0 0110 0100 
    1- 0 1111 1111 
     =========== 
     1 0110 0011 99+ (without that leading 1) 
1

それはあなたのバイナリ表現が何であるかに依存します - 補数、2の補数、符号の大きさ、または何か他のものである。 「反転ビットと加算1」は、2の補数の場合に正しいです。これは、今日のほとんどのコンピュータが、最近では、符号付き数に対して内部的に使用しているものです。あなたの例では、 "10000000"は-128の8ビットの2の補数表現で、これはあなたが望むものです。 2つの補集合に-0というようなものはありません。

符号の大きさについては、符号ビットを反転することで否定します。補数の場合は、すべてのビットを反転することで否定します。

関連する問題