どうもふじわらです。
今日は補数表現について解説しようと思います。
補数表現って何?
補数表現っていうのは、ざっくり説明すると先頭ビットが1の時負の数を表すっていうものです。
具体例を出すと、5ビットの2進数があるとすると、10011は負を、00111は正の数を表しています。
求め方
さっきの例の10011は先頭ビットが1だから負の数であることがわかりますね。
けど、10進数だといくつになるかわからないですね。
注:10011で0011をみて-3と答えるはダメです。間違いです。
では、どうやって変換するかやっていきましょう。
まず、1の補数を取ります。
1の補数というのは、ビット列を全て反転させることです。
10011の場合は01100ですね。
そして、1の補数を取った後に最低位ビットに1を足します。(これが2の補数です)
そうすると、01101となりますね。
これは10進数では13です。
10011の2の補数を取って10進数に直したものにマイナスをつけることで、10011の値を求めることができます。今回は-13となりますね。
マイナスの10進数を二進数にする場合も同じ手順でできます。
10進数のマイナスを取る→二進数にする→2の補数を取る→完了
例: -5を二進数にしてみましょう上の手順のようにして、
(5ビット列とします)
-5→5→00101→11011
10進数で-5は2進数で11011となることがわかります。
まあ、本当に変換できてるのか不安なので、11011を10進数に戻してみましょう。
11011→2の補数をとって00101→10進数で5で→先頭ビットが1だったので-5ということがわかりますね。
四則演算
補数表現を使うと
01011-00111とか計算できてしまいます。
上の例だと、-00111が厄介ですね。
ですが、これの2の補数を取ることで、
01011+11001という形で表せます。
あとは、足すだけです。
足すと、00100となります。
(桁上がりは無視してください)
これを10進数に戻すと4です。
01011-00111=11-7=4であってますね。
まとめ
補数表現はめっちゃ簡単。
こういうことが、コンピュータの内部で起こっています。
コメント