Y&S SoftWareのホームページ
使いかってのいいソフトウェアを開発します

発想の転換 「引き算を足し算に変えられないか?」

コンピュータで引き算(A - B)を処理するには、専用の「減算器(サブトラクタ)」を用意しなければならず、回路が複雑になる。だから減算器は使いたくない。
足し算専用の全加算器(フルアダー:Full Adde)だけを使って計算したい。


数学的な発想として、

A−B=A+(−B)

であるから、「-B を作って加えれば、減算と同じになる」と考えられる。

では「-B」をどう表現するか?

昔の計算機科学者や数学者たちは、「-B」を 2進数で効率よく表す方法を考た。
その結果見つけたのが、

-B=NOT(B)+1

という方法、つまり 2の補数 の導入。


この原理は、実は10進数でも似たような考えができる

【10進数の例】
「3桁の数で 1000 - 123 を引き算したいとき」

→ まず 123 の 9の補数 = 876
→ これに 1 を加える → 877(10の補数)

→ 1000 + (−123) = 1000 + 877 = 1877

→ 桁あふれの 1 を無視 → 結果は 877
→ つまり「反転して +1」でマイナスの数を表せる!


誰が最初に気づいた?
挙げられるのは数人

ジョージ・ブール
論理演算の基礎を作った(1850年代)

チャールズ・バベッジ
初期の機械式計算機の発想を持っていた

ジョン・フォン・ノイマン
2進法と2の補数による演算を推進(1940年代)

特に、1940年代後半の真空管式コンピュータ(ENIACなど)の時代に、
「2の補数を使えば減算回路が不要で済む」という回路の最適化の観点から2の補数が採用された。