補数と進数について教えてください。

高校生用の質問にご利用ください。
フォーラムルール
新規投稿は質問のみとさせていただきます。
返信する
ゲスト

補数と進数について教えてください。

投稿記事 by ゲスト »

2進数の2の補数とはなんですか?
なるべくわかりやすく教えていただきたいです。
ゲスト

Re: 補数と進数について教えてください。

投稿記事 by ゲスト »

例えば、8ビットで表すときは、
-00110010 を表すのに、

100000000
-00110010 、の計算結果である、
_11001110 というビット列で表す表現の仕方を 2 の補数といいます。

要するに、
100000000下駄を履かせて(100000000 は 8ビットで表してるときの話ね)
何でもかんでもプラスにしてしまおう、という考え。
プラスにはなってるけど、
それが100000000下駄を履かせた結果であることはわかってるから、
出力のときは、ちゃんと、下駄を脱がせた値のマイナスを出力します。

何のためにそんなやり方にしてるかというと、
コンピュータで、足し算するとき、
プラス + プラス 、も、
プラス + マイナス 、も、
マイナス + プラス 、も、
マイナス + マイナス 、も、全部、全く同じ操作でできるようにするためです。
CPU に複雑な機構を入れずに済ませるためです。引き算についても同様。

掛け算や割り算をするときは、
絶対値に直してからでないとできないから(CPUも筆算と似た方法でやってる)、
掛け算や割り算をするときのことを考えたら、
2 の補数にしても、ちっともメリットはないのですが、
なぜ、そうなったのかの歴史的経緯はよくわからない。

CPU の 8080 や Z80 には掛け算や割り算の機能はなかったですが、
ちょっと規模がでかくなりますが IBM360 や IBM370 にはあった。
それ以前に作られた CPU には、なかったのかもしれないけど、
世界最初の現方式のコンピュータの EDSAC には、掛け算だけはあった。
大昔であっても、掛け算のある CPU もあったのです。
掛け算の方を優先したら、2 の補数にしない方がいいのですが、
なぜか、足し算や引き算の方のことしか考えてない方式に決まった。
使用頻度の関係か?
2 の補数のやり方が優れてるからというより、
歴史的経緯でそれが普及してしまい今更変えられなくなってしまったのでしょう。
返信する