「-128」をバイナリに変換したいとしましょう。符号付きバイナリに小数点を変換する
私が理解から、私は、 "128" のバイナリ表現を取得するビットを反転して、それで= 10000000
128を1
を追加するので、 "逆" 01111111
ですだから "01111111" + "1" = "10000000"は "-0"ですね。
私の教科書はこれをとても簡単に思えますが、間違っていることを理解できません。助けてくれてありがとう。
「-128」をバイナリに変換したいとしましょう。符号付きバイナリに小数点を変換する
私が理解から、私は、 "128" のバイナリ表現を取得するビットを反転して、それで= 10000000
128を1
を追加するので、 "逆" 01111111
ですだから "01111111" + "1" = "10000000"は "-0"ですね。
私の教科書はこれをとても簡単に思えますが、間違っていることを理解できません。助けてくれてありがとう。
いいえ、それは間違いなく-128
です(とにかく2の補数で、あなたがネガティブな数字についてのあなたの説明を話しています)。負の数の符号/大きさの表現は唯一-0
です。
2つの表現の詳細については、this answerを参照してください.3つめの表現にはCの補数もありますが、そこからスニペットをコピーしてできるだけ自己完結型にします。
:
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)
それはあなたのバイナリ表現が何であるかに依存します - 補数、2の補数、符号の大きさ、または何か他のものである。 「反転ビットと加算1」は、2の補数の場合に正しいです。これは、今日のほとんどのコンピュータが、最近では、符号付き数に対して内部的に使用しているものです。あなたの例では、 "10000000"は-128の8ビットの2の補数表現で、これはあなたが望むものです。 2つの補集合に-0というようなものはありません。
符号の大きさについては、符号ビットを反転することで否定します。補数の場合は、すべてのビットを反転することで否定します。