Shiro Kawaiさんのプロフィール写真

1と0しか理解しないように作っているからです。それ以外の作り方もありますが、1と0のバイナリで作ることに圧倒的なメリットがあるからです。

信号の伝達には必ず雑音の混入が伴います。もし、例えば0~1の間の数値を0V~1Vの電圧で表すとすると、雑音により電位が変わるとそれがそのまま誤った計算結果になってしまいます。さらに、元からの情報と雑音が区別できないので、誤差は次々に蓄積してゆきます。

しかし、例えば「0~0.3Vまでは “0”、0.7V~1Vまでは “1”、0.3~0.7Vの間はまだ信号が遷移中とみなして待つ」ということにすれば、電位で30%までの雑音が乗っても正しく情報を受け取れます。一旦情報を受け取ったら出す時にまた0Vか1Vで出せば良いので、雑音の蓄積も避けられます。

一番下の層でそうやって雑音の影響を隠せると、それより上の層は信号が常に0か1であることを前提に組み立てれば良いので、圧倒的に設計が楽になります。

バイナリにすることには欠点もあります。1本の信号路で0か1の情報しか送れないので、大量のデータを送ったり蓄積したりするのに大きな回路が必要になることです。そこで、雑音が制御できる範囲を絞って、1本の信号路により多くの情報を載せることはあります。昔々、たかだか3kHzちょいの帯域の電話の音声回線を使って数十kbpsの伝送速度を出していたモデムとか、蓄積する電荷量を段階的に調整して1記憶素子に複数ビットの情報を詰め込むフラッシュメモリとか。ただ、それらも外部との接続箇所では1と0でクリアにカットした信号を出すことで、内部での雑音の処理が外部に漏れ出すことを防いでいます。

今後、プロセッサ内部でもマルチレベルロジックを採用したり、あるいは量子コンピュータなど別の原理を用いたユニットが入ってきたりするでしょうけれど、そういったユニット同士を接続する箇所では、一旦1と0に整理して抽象化するという手法は廃れないだろうと思います。

この質問に対する他の18件の回答を表示