コンピューターの、スゴイところとオモシロイところ。

【プログラムとデータ】その区別は、見る人の心の中にある

【プログラムとデータ】その区別は、見る人の心の中にある

処理装置と制御装置をもつプロセッサは、メモリに格納されている情報を使いながら仕事をこなします。ところで、メモリでは、プログラムもデータも区別せずに格納されています。混乱の元にならないのでしょうか?

【プログラムとデータ】その区別は、見る人の心の中にある

実はコンピュータの世界では、同じ情報が、見る者によってプログラムとして解釈されたり、データとして解釈されたりといったことが頻繁に起こります。なので、メモリ上ではそれらを区別せずに格納するのが最適なのです。

メモリに格納されているそれぞれのバイナリ文字列は、数と思えば数ですし、命令と思えば命令、文字と思えば文字です。どの解釈もそれ自体は誤りではなく、その場面でのそのバイナリ文字列の目的に合致した解釈が正しい解釈となります。

バイナリ文字列はプログラムなのかデータなのか、それは「ルビンの壺」が壺の絵なのか、2人の人物の顔なのか、という問いと同じ。答えは、見る人の心のなかにあるのです。

 

同じ情報、いろんな解釈

同じ情報、いろんな解釈

例えばメモリのあるアドレスに「100000」というバイナリ文字列が格納されていたとき、これはデータでしょうか、それともプログラムでしょうか?数だと思って解釈すると、「100000」は32です。プログラムだと思って解釈すると、これはadd(加算)命令です。「100000」自体は意味を持ちません。解釈方法が決まってから、初めて意味を持つのです。

図の説明

  • ビットを1つ、0から1に変えてみます。「100010」になります。

こうして得たバイナリ文字列は、数だと思えば32、命令だと思えばsub(減算)命令です。1ビットを変える処理が、32+2という加算処理だったとも言えますし、add命令からsub命令への変換処理だったとも言えるのです。

 

「文字化け」も解釈の違いが原因

「文字化け」も解釈の違いが原因

最近はあまり見かけなくなった文字化け。これも、データの解釈の違いが原因で生じる現象です。例えば「1011000110110010」というバイナリ文字列があるとします。これを数だと思えば45489ですが、シフトJISで表現された文字だと思えば半角カナの「アア」、UTF-8でエンコードされた文字だと思えば「臼」です。

どの解釈も、解釈の仕方は間違いではありません。ただ、このデータが想定している解釈でなければ、誤った意味で使われてしまうのです。

 

  • Facebook
  • Hatena
  • twitter
  • Google+

2進数で遊ぼう!オリジナル商品

  • facebook
  • twitter

つぶやき

PAGETOP
Copyright © 情報機械研究所 All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.