加算器なのに減算ができるってホント?コンピュータの秘密に迫る!

詳細情報

集会名 CS集会
日時 2023年12月05日 22:00 - 22:30
テーマ 加算機なのに減算?
発表者 夜鍋ヨナ
発表資料 ファイル

発表のハイライト

  • コンピュータは、加算器と補数変換回路を組み合わせることで減算を実現している!
  • 補数変換回路は、全加算器と共通の構造を持つ部分があるため、回路を圧縮できる!
  • 加算と減算を切り替えるセレクタ回路は、XORゲートで実現できる!
  • ALU(算術論理演算ユニット)の基礎が理解できる!

VRChatの「CS集会」で、夜鍋ヨナさんが「加算機なのに減算?」というテーマで発表を行いました。コンピュータの基礎をなす、加算器と減算の関係性について解説した内容をご紹介します。

加算器と減算の関係性

皆さんは、コンピュータがどのように減算をしているか知っていますか?実は、コンピュータは加算器と呼ばれる回路を使って減算を行っているんです。でも、加算器でどうやって減算をするのでしょうか?

その秘密は「補数」という考え方です。

補数とは?

補数とは、ある数を足すと特定の値になる数のことです。例えば、10進数の5の9の補数は4です。なぜなら、5 + 4 = 9となるからです。

コンピュータでは、2進数を利用するため、1の補数2の補数という考え方が重要になります。

  • 1の補数は、各ビットを反転させたものです。
  • 2の補数は、1の補数に1を加えたものです。

補数を使って減算する

2の補数を用いると、減算を「加算」に変換することができます。例えば、5 - 3 を計算する場合、3の2の補数を求めて、5に加算します。

5 - 3 = 5 + (2の補数:3)

2の補数:3は、10進数で7なので、

5 + 7 = 12

となります。12から、元の桁数を超えた部分(この場合は、10)を無視すれば、答えは2となります。

補数変換回路と加算器の類似性

コンピュータ内部では、この補数を計算する回路と、加算器は別々に作られていると思われがちですが、実は共通の構造を持っている部分があります。

例えば、2の補数は、ビットを反転して1を加算することで求められます。この「1を加算する」部分は、全加算器と同じ構造で実現できるのです。

夜鍋ヨナさんは、この構造に着目し、補数変換回路と加算器をより効率的に組み合わせる方法を検討しました。

回路の圧縮

補数変換回路と加算器の構造が似ていることから、ヨナさんは回路の圧縮を試みました。

具体的には、補数変換回路で不要な部分を削減したり、加算器と減算器の共通部分をまとめたりすることで、よりシンプルな回路を実現することを目指しました。

結果、減算回路の1,2段目を合体し、加算器と減算器を1つの回路で実現する全減算器を考案しました。

加算と減算を切り替える回路

全加算器と全減算器を組み合わせた場合、加算と減算を切り替える回路が必要になります。この回路はセレクタと呼ばれる回路で実現することができます。

セレクタ回路の圧縮

ヨナさんは、このセレクタ回路も圧縮できることに気づき、よりシンプルな回路を実現しました。

その結果、セレクタ回路はXORゲートで実現できることが分かりました。

ALU(算術論理演算ユニット)への応用

今回、ヨナさんが解説した加算器、補数変換回路、セレクタ回路は、CPUの重要な一部であるALU(算術論理演算ユニット)の基礎となっています。ALUは、コンピュータの演算処理を担う重要な部分で、加算、減算、論理演算など様々な演算を実行することができます。

今回の発表では、ALUの算術演算部分の基礎が完成したということで、今後の発表では、論理演算部分や符号による大小判定など、より高度な内容が期待されます。

まとめ

コンピュータの減算は、加算器と補数変換回路を組み合わせることで実現されています。補数変換回路と加算器は共通の構造を持つ部分があるため、回路を圧縮することができます。加算と減算を切り替えるセレクタ回路は、XORゲートで実現できることが分かりました。

これらの知識は、コンピュータの基礎を理解する上で非常に重要であり、ALUなどのより高度な回路を理解するための基礎となります。

スライド資料はこちら

CS集会の他の発表もチェック!

シフト演算ってなぁに?10進数と2進数で考えてみよう!

VRChatで量子コンピュータの世界を体験!CS集会#33で夜鍋ヨナさんが紹介した量子コンピュータの世界

VRChat CS集会で発表!量子コンピュータで半加算回路を実装してみたよ!

生成AIとプログラミング:夜鍋ヨナさんが語る、LLMとシステム開発の未来!

VRChat CS集会で学ぶ!比較器の仕組みと引き算を用いた実装

シフト演算をわかりやすく解説!コンピュータ内部でどう動いているの?