二進数

2進数とか2進法とか、0と1で表現しますよね。

0 = 0
1 = 1
2 = 10
3 = 11
4 = 100
5 = 101
6 = 110
7 = 111
8 =1000
9 =1001
10=1010

二進数が何時頃からあるのか?と言う疑問について、ネットで見てましたら。易とか占いで小さな机を出している人のトレードマーク的なあれ、あれが二進数だよねと言う記述を見たことが有りました。

取り敢えず似たような図を掲載されている「六十四卦 – Wikipedia」で見ますと、なんとなく順番的には2進数に対応させれると思えたりします。でも、ネットで似たような図を探しますと、順序が異なるのが多く有りまして2進数じゃないのかな?とも思えて、ちょっとよくわからないです。

ーーー と
ー ー とで表現されていますので、どちらかを0にどちらかを1に当てはめると、2進数だとも言えそうですよね。

改めて、二進法を検索しましたら、八卦との関連などが書いてあるようです。他には、インダス文明と二進法の関連について書かれているWEBも有りますし、相当古い時代からあるみたいですね。

2進数の演算には論理回路を用いるけど、
そのへんを分り易く書いておられるページに「コンピュータはどのように計算しているのか? – ザリガニが見ていた…。」が有りました。

論理回路の理論的裏付けはブルー理論とかブルー代数とか。

じゃぁ、ブルー代数は、誰が考えたんでしたっけ?

論理回路とブルー代数について書いてあるページを検索してみましょ。

そもそも、ブルー代数とか、なんで必要なの?と言う疑問がわきます。

回路を組むにあたり部品点数が少ないほうが安上がりだし、信頼性(裏を返せば故障しない確率)が高くなりますし、シンプルな回路のほうが見やすくて判りやすいので、不必要にややこしい回路にしてしまわないためには、知っているといいよ。という物なのでしょうね。たぶん。

そこで、もうちょっとブルー代数の親切な解説のはないのかな?と見ていきましたら「論理回路 – nifty」が図と表があるので、判りやすそうですね。その他「論理回路 同じ動作 論理式 ブール代数 ド・モルガンの法則 結合則 分配則 …」も判りやすそうな感じですね。このページまで見てきますと、「ド・モルガンの法則」や「ド・モルガンの定理」などという言葉が出てきました。

論理回路がどう言う動きをするかについて、理解を深めるとか、ある動きをさせるときに、論理回路をどのように組めばいいかと言う、事のための話なんでしょうね。理解しているとスラスラ読めるしスラスラ組めるけど、知らないと、えらい苦労するし、間違ったりしやすい。とか。そういうことなんでしょうね。

さて、プログラマと2進数では、数値についての表現の数々を理解していないと、間違っちゃいますので大変です。なので、この辺の知識はある程度大事です。

純粋な2進数なのか?、「二進化十進表現:BCD」なのか?どちらの表現を用いるか、用いているか、判っていないと計算ミスというか、バグになります。

数値を2進数表現にも整数の表現とか実数の表現とか、浮動小数点とか、いろいろ有り、それぞれに表現が異なります。さらに、数値の精度も単精度とか、倍精度とか桁数についてもいろいろ有ります。符号付数値表現に、2進数の引き算に必要な「補数」についての記載が有ります。

機械語とかバイナリーとかを見て、その時点で処理しているのが、どの表現形式の値を取り扱っているかを見抜くのはちょっと骨が折れそうな感じがしませんか?。

プログラミングに縁がない方には、ピンとこないかもしれませんが、値を2バイトで表現しているときもあれば、1バイトで表現してることも有りますし、4バイトのことも有ります。64ビットだと、8バイトの値です。しかも、整数なのか、実数なのか、浮動小数点形式なのか、予めわかっていればいいのですが、知らずにある一部だけを眺めても「木を見て森を見ず」でさっぱりわからない事になります。個々個別の処理や手続きやルーチンを一つ一つつぶさに解析したとします。その解析結果は、その手続きや処理やルーチンがどういうものであるかを調べたものあるということです。例えて言うなら将棋の駒の動きを規定したルール群みたいなものです。ではそのルール群が、いつ、どう言うトリガーで、どう言う順序で動くのか?と言うそのソフトなりプログラムの挙動を推論する作業が待っています。これは、将棋に例えるなら、ある局面のコマの配置の時に、どう言う一手を打てるかその可能性を見極める作業に似ています。そのソフトの置かれた状況・条件から、そのソフトの挙動を推論する。大変な作業です。

バイナリ形式の実行モジュールだけしか資料がない場合、解析がとてつもなく大変ということなんです。せめて、ソースコードぐらいちょうだいよ、とか、ヘッダーファイルが無いと解析できないよとか、詳細設計書頂戴よ、概要設計書頂戴よ、要求仕様書も頂戴よ。と声を出して、入手しないと解析なんて出来ない。しかし、これまでそういうものは企業機密であるため、提供されない事が多く、しかも、勝手に解析をしてはいけないと言うルールも有りました。勝手に解析したら法的手段を取り訴えると書いてあったら解析は出来ないです。よくある形式では勝手に解析をしないという条件を飲むなら、ソフトウェアの利用許諾の「はい」を選んでインストールしてもいいですが、「はい」を押せないなら、インストールしないでください。というか、インストールされない。つまり、インストールしてあるということは、イコール、それはソフトウェア利用許諾を承諾したと言う証。ということですよね。ね、ある種の矛盾を感じるでしょ。つまりITでは、安全性とか完璧性とかを確保するために確認作業をするにしても、途切れている。しかも、その確認作業は尋常じゃ無い程の困難な作業を伴う。ので、まぁ個人でやるには荷が重すぎる。だからといって高い人件費をそれに投入出来るほど利益を挙げられる企業は世界に目を向けても少ない。

オープンソース(OSS)の普及に伴い、巨大ソフトメーカーもソースコードを一部限定的にでも開示してくれる時代になりましたが、読みこなすのが大変です。

次々に世界中でソフトは開発されてきますので、その数は膨大です。しかも、いろいろな人が、個人の判断でインストールしたり普及させたりしていますので、待ったをかけるのは困難です。そこで、誰かが、手を上げて、解析しますので、解析が終わるまでご利用を控えてくださいとか言ってくれたと仮定しましても、待たずに使うでしょうし、待っている人はイライラして、催促したり、もうまてない邪魔だと言い出すでしょうし。待っている間に国際競争力が弱体化しかねないとか言うかもしれませんし。結果的にそれは、どう言う事かと言うと、世界規模の信頼関係が前提になっているのが、ITだということになると思います。世界規模の信頼関係がない場合、何を根拠にITを信頼したらいいのかが大問題。参ったな、飯が食えないじゃないか、そう考えると、ゲームや、日記の保管庫とかでビジネスをしている人たちって、頭いいなと思います。