コンピュータ(CPU)でなぜ負の整数の表現として2の補数を使うか

2の補数というのは何かという説明はWikipediaに譲るとします。

結論から言うと、CPU(ハードウェア)的には単なる符号なし整数の加算・減算を行っているだけなのに、人間側の解釈の仕方だけで正負の数の加算・減算を扱えるようにするためです。

いまCPUレジスタ1バイト長であるとします。で、16進数で符号なし整数0xFF(十進数で255)に1を足します。そうすると桁あふれが起こって結果としてこのレジスタの値は0(ゼロ)になります。

0xFF(255) + 1 = 0x100(256) = 0x00  [レジスタは1バイト長固定]

ここでです、もし、人間側が勝手に”1バイト長でのレジスタの値0xFFを-1という意味としよう”と決めたとします。なぜそんなことをするかといえば、そう解釈すると、

0xFF(-1) + 1 = 0

となり、都合が良いからです。

この調子で、0xFEを-2と勝手に解釈すれば…

0xFE(-2) + 2 =  0

おお~、よいですね。

では、符号なし整数で0xFE(254) + 1 = 0xFF(255)ですが、我々の符号付の解釈では…

0xFF(-2) + 1 = 0xFF(-1)

うまくいく!

とまぁ、こんな風に、符号付の計算だけのためのハードウェアをわざわざ用意しなくても、人間側の解釈だけで正負の数が表せるのが2の補数表現のうまみです。

「数式ということばじゃないと正しく伝わらない」問題

趣味で、初期仏典や聖書、コーラン、ヨガのギータなんかを乱読しているんですが、やはり自然言語によっていかに良いことを伝えようとしても、千年もすると(故意かどうかは微妙ですが)すっかり内容と逆のことを読み手が勝手にやりだすという事例を多く見聞きします。

たとえば、釈迦は「異性関係は人間の生殖にかかわる本質的な欲望なので、むやみに淫らにならないように、(男性の弟子が多かったので)女性には気を付けろ」というようなことを折にふれて語っていたり、「肉を食うからなまぐさと言うのではない、友人のカミさんと陰で一発やってそ知らぬふりをしているのを生臭というのである」なんて言ったりしています。

これが数千年たって、仏教がインドから中国、さらに日本へとくると何が起こったかと言うと…

「異性関係は気を付ける」→「女はやばいらしい」→「女とヤるのはよそう」→「男とヤればいい」

なんでだよ(笑)wwwwwwwwwww

たとえば、日本の寺関係の隠語で「幼い小僧」への性的表現がかなりあるとか、仏教僧を紹介する書物で、「この僧は女性との性関係をもたなかった、さらに男性との性関係ももたなかった」ということが”珍しい人”として紹介されていたり。

またキリスト教でもアメリカでカソリックの神父による幼児への性的虐待が社会問題になっていてバチカンはたしか総額数千億レベルの訴訟を抱えていると聞きました。

残念ながら、釈迦、イエス・キリスト、ムハンマドなど名だたるセイント(聖人)たちは、失敗したと言わざるを得ません。

釈迦だって、大悟をしたあと一度はそのまま死ぬ気だったのですが、まぁ、神話的表現にあえてしてますが、梵天に請われて世に「我は仏陀である」と大見得をきって宣言して、「人々の苦を滅しよう」という意図を持ったはずです。

だいたい、釈迦などがいう煩悩のコントロールは、よく釈迦本人も「激流を泳いで渡るほど難しい」と自分で言っていますし、「煩悩の激流を渡りきるものは数少ない」と言っています。

しかし、いったん社会的リーダーになろうと決意したのなら、所定の訓練をつめば、ほぼ九割以上の人が煩悩のコントロールができるようになるような訓練メソッドを残して、その結果、人類が戦争をしなくなったというような”結果”が欲しかったところです。

「激流渡り水泳スクール」っていって生徒を集めていて、激流を渡れるようになるのはほんの数人っていうのは許されないと思います。

みなさんにおなじみの日本の仏教者で一休さんという方がおられました。

その一休さんは、次のような言葉を残しておられます。

「釈迦といふ いたづらものが世にいでて おほくの人をまよはすかな」

まさに、私の感想もこの句につきます。

なぜなら、インドでは今、ヒンドゥーが支配的な宗教ですが(不可触民に仏教を広めている日本人の方がおられますが)、じゃ、仏教徒はどうなったのかというと、釈迦の没後数百年に、ヒンドゥー教徒による仏教徒の虐殺が起こっているんですね。また、最近ではミャンマーの仏教徒からのロヒンギャへのひどい虐待の問題なんかもあります。

「お釈迦様、あんた、問題解決するどころか、ぶっちゃけ問題を増やしたんじゃないんか?」


これらセイントの失敗のひとつは、聖典が情緒的な自然言語によって記されたことが原因の一つだと思います。

そこへいくと、数学のたとえばユークリッド幾何学なんて数千年たってますが、根底から覆されることはありませんでした。リーマン幾何学などの前提条件を変えたさらなる発展はあり、それはそれで実り多い発展をしましたが、いまだにユークリッド幾何学はほぼ万人に正しく解釈、理解されてその正しさに挑戦して成功した人はおりません。

また、数学はゲーデルの不完全性定理により、己の限界さえもきっちりと示しています。

いま私はこれらの、「数式もしくは形式言語でなにか言わないと、バカが曲解する問題」をちらほらと折にふれて考えています。

 

1/3=0.333333…は面倒な数?

$$\frac{1}{3} = 0.3333….$$

というように、1/3は小数点以下に3がずっと続く循環小数として表記されます。ここから、1/3というとあのなんか無限に続いてしまう面倒な数というイメージをもっている方もいらっしゃるのではないでしょうか。

しかし、これはあくまで今のわれわれが位取り記数法で10進法を使っているから無限小数として表記されているだけなのです。例えば3進法では1/3は0.1と表記されます。6進法では0.2です。

つまり、別に1/3が本来的に無限小数でしか表記できない半端な感じの数というわけではないのです。

 

位取り記数法  wikipediaより


歴史的には、十進法が世界的に広まったのはフランス革命の革命政府メートル法とともに十進法を定めて以来であり、それ以前は国や分野により、様々な N に対する N 進法が用いられていた。