Alternative 笑門来福:ITmediaオルタナティブ・ブログ (RSS) Alternative 笑門来福

ソフトウェアは私たちに幸福をもたらすことができるのか

 C、Java、JavaScriptなどで、「0123」という数はどういう意味でしょうか。プログラマーであれば、これが8進数の「123」で、10進数で「83」(1×82+2×81+3)という数値だということは常識です。では、なぜ0から始まると8進数ということになっているのか?

 実は、今週の社内勉強会の中でこの疑問が出て、残念ながら参加者の中にこの疑問に答えられる人がいませんでした。そこで、Webでわかる範囲で調べてみた結果わかったのが以下のことです。

なぜ8進数が必要だったのか?

 さて、この答えにたどり着くには、まず「そもそもなぜ8進数が必要だったのか?」ということを理解しなければなりません。

 これは、コンピュータの歴史に遡ります。実は、その昔、コンピュータの処理ビット数は3の倍数が普通でした。たとえば、IBMの70xシリーズや70xxシリーズは36bit機(例:701, 7094) 、DECのPDP-7は18bit機、PDP-8は12bit機(参考)、UNIVAC 1000は24bit機(参考)など。そして、アドレッシングは15ビットだったりしてインストラクションを3ビット単位で考えることが多かった(参考)。ということで、ビット3桁でくくるのが都合がよかった。また2進3桁であれば、0-7なので、数字の範囲で処理できるので好都合です。

なぜ0をつけると8進数としたのか?

 まず、普通の数字、たとえば「1」, 「12」, 「123」などは10進数です。8進数の「1」, 「12」, 「123」という数字があったとしてこれらを8進数として明確に区別するには、算数では「1(8)」, 「12(8)」, 「123(8)」と表記します。しかし、下付き文字はテキストベースでは使えないし「1(8)」, 「12(8)」, 「123(8)」などと書くと意味が紛らわしい。しかも、数字を一旦バッファリングしたあとに3文字を読んで初めて8進数とわかるのも処理上はコスト高となって、Assemblerなどの低級言語、しかもメモリが限られているなど効率が重視される状況では都合の悪い実装となってしまいます。

 つまり都合がいいのは、後で判別できるのではなく、先に8進数だということが判別できること。そのためには「1」, 「12」, 「123」の前に何か識別子をつけるということになります。そして、処理コストを考えると、それは1文字の方がいい。

 そうなると、「じゃあOctalの1文字をとって"o"をつけることにしよう」という発想が出てくると思います。つまり、「o1」, 「o12」, 「o123」と書くと8進数ということです。これはこれで明快です。

 しかし、コンピュータでの処理を考えたときはどうでしょう。処理プログラムがある文字列を渡されたときに、先頭が「o」であれば、その次に続く文字をみて8進数かどうかを判断しないといけません。なぜなら、「o123」ではなく「ooimachi」という文字列かもしれないから。もちろん、これでも処理できますが、もっと賢い処理の仕方はないでしょうか?

 そこで、誰かが思いついたのが先頭に「0」を使うことです。普通の10進数では、数値0以外で先頭に0がくることはありません。また、10進数でも8進数でも0は0です。だから、最初に0が来たら8進数と断定することができて、処理コストも下がります。その後16進表記(0x)なども出て、0で始まるから8進数とは言えなくなっていますが、最初に思いついた人は頭いいですね。

いつから使われ始めたのか

 上記のような背景から考えると、0で始まる8進数は、初期メインフレームのAssemblerで使われ始めたと考えるのが自然だと思います。しかし、Web上の文献の範囲だと1960年代後半に開発されたB言語(C言語の親に当たる)でそれが使われていたというところまでしか遡れませんでした。以下、B言語の仕様から抜粋。

An octal constant is the same as a decimal constant except that it begins with a zero.

8進数は人間界にも存在した!

 ところで、8進数はコンピュータ独特のものと思っていたら、WikipediaのOctalの項には、なんとアメリカやメキシコの一部では実際に8進数が使われていると書かれています。しかも、その由来は「指を数える」のではなく「指の股を数える」のだからだそうです。なるほど!(笑)

The Yuki language in California and the Pamean languages in Mexico have octal systems because the speakers count using the spaces between their fingers rather than the fingers themselves.

平野洋一郎

Special

- PR -
コメント
Hirano, Yasuhiro 2006/06/13 00:51

>コンピュータの処理ビット数は3の倍数が普通でした。
実際は、6bitの倍数が正しいですね。(アドレスバスが15bitという例は、データバス幅とは違う次元の話ですから)
では何故6bitの倍数かというと、「アルファベット(大文字のみ)と数字と若干の記号を表現するのに6bitで十分だったから」と聞いたことがあります。1bitでもメモリを節約したい時代、8bitの倍数だとテキスト処理をするときに無駄が多かったのでしょう。


コメントを投稿する
メールアドレス(必須):
URL:
コメント:
トラックバック

http://app.blogs.itmedia.co.jp/t/trackback/77444/4099401

トラックバック・ポリシー


» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

平野 洋一郎

平野 洋一郎

インフォテリア代表取締役社長/CEO。主力製品ASTERIAでシステム開発の新たな形を提案するとともに、OnSheetやHandbookなど新たな分野のソフトウェアに挑戦する。

詳しいプロフィール

カレンダー
2012年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
カテゴリー
エンタープライズ・ピックアップ

news094.gif 富士通元社長の山本卓眞氏が残した次代へのメッセージ
富士通の社長、会長を務めた山本卓眞氏が亡くなった。哀悼の意を込めて、日本のIT産業界の大御所が残した次代へのメッセージを紹介しておきたい。(2/6)

news094.gif Facebook就活はもう古い?
約260人のブロガーが、ITにまつわる時事情報などを日々発信しているビジネス・ブログメディア「ITmedia オルタナティブ・ブログ」。その中から今回は「就活」「都心の雪」「ソーシャルメディア」などを紹介しよう。(2/4)

news094.gif 東北をコットンの生産地としてブランディングしたい──リー・ジャパン・細川取締役
塩害に強い綿の生産で東北に新たな産業を作りたい。オーガニックコットンの採用など、環境負荷を下げるジーンズ生産に取り組んできたリー・ジャパンの新たなチャレンジとは──。(1/30)

news094.gif 東北から始まるイノベーション
企業のICTを活用と若手IT技術者による東北発のイノベーションが、中長期的な震災復興の鍵となる。(1/27)

news094.gif 貧困国の雇用を創出する印刷屋、丸吉日新堂印刷の挑戦
全国から約2万7000件の名刺制作を受注をする札幌の小さな印刷会社の成功の秘密は、地道な社会貢献にあった。(1/16)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ