2017-11-14 12 views
1

2の補数を使って数値をバイナリに変換する方法は分かっていますが、私はまだその概念に混乱しています。バイナリへの自然数の約2の補数

負の数を2進数に変換するときにのみ2の補数を使用しますか?

助けがあれば助かります。ありがとう

答えて

0

負の数の2の補数表記は、実際には固定長の符号化が明確に定義されているかどうかによって異なります。どうして?先頭のゼロは意味的に関連している必要があります。可変長符号化(一般に数学のような)は、先行ゼロを無視します。0101と101は同じ番号です。しかし、2の補数では、これらの数値の1つは正(4ビットの2の補数表記では0101 = 5)で、もう1つは負(3ビットの2の補数表記では101 = -3)です。したがって、2の補数が意味を持つようにするには、実際にコンテナのサイズを指定する必要があります。

これで問題は解決したので、あなたの質問に対する答えはより明確になります。長さがkの任意のビット列は、kビットの2の補数表記の数字です。最上位ビットがゼロの場合に限り、数値は正である。任意の与えられた "正の"数値は、kビットを設定する必要がない場合、与えられた2の補数表記に関して肯定的です。ここで、kは表記のビット数です。たとえば、4ビットの2の補数表記では、「正の」数字8(= 1000)は表現できません。とにかくしようとすると、数字は-8(= 1000)と解釈されます。表現可能な範囲は、[-8,7] = [1000,0111]です。