- ベストアンサー
コンピュータのデータ、プログラム
コンピュータのデータやプログラムはハードディスクやメモリ上では0と1で保存されていると思います。でも文字と文字の区切りや、命令と命令の区切りはどうやって識別されるのでしょうか?区切りや変換ルールも0と1で保存されるのですよね、わけがわかりません。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> 文字と文字の区切りや、命令と命令の区切りは > どうやって識別されるのでしょうか? データ形式に関する規格によって識別されます。 以下,次のリンク先から引用。 http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml エリカ「どうして規格が必要なのか説明するね。コンピューターはどんなデータも 0 と 1 の組み合わせだけで記録しているってことは知っているよね?」 ハル「はい」 エリカ「それじゃ『1000001010100000』っていうビットの並びはどういう意味かわかる?」 ハル「…わかりません。どういう意味なんですか?」 エリカ「私にもわからない。実は、コンピューターにもわからないんだ」 ハル「え? どういうことですか?」 エリカ「ビットの並びの意味は使う人が自分で決めていいことなの。『1000001010100000』は 33440 という数のことかもしれないし、-32096 という数のことかもしれない。41090 とか -24446 かもしれないし、文字の『あ』かもしれない。もっと他の意味かもしれない。使う人次第ってこと」 ハル「そうなんですか… でも、意味が決まっていなかったら、私が作ったデータを先輩が見ても何が書いてあるのかわかりませんよね? 困りませんか?」 エリカ「そう。困るよね。だからデータにも規格があるの。規格に沿ったデータであれば、誰が見ても意味がわかるでしょう?」 ハル「なるほど、そうですね」
その他の回答 (5)
- Tasuke22
- ベストアンサー率33% (1799/5383)
非常に多くの取り決め、約束事、ルール等があって区切りが分かるようになっています。 例えば、ファイルはexeファイルとかtxtファイルとかbmpファイルとかありますね。 これらの拡張子で、ファイルの中はどのようなデータ構成になっているかの取り決めがあり、これをフォーマットといいます。 各処理はこれらのフォーマットに従って、データを切ったり、命令を切ったりしている訳です。 例えばmp3であれば先頭何バイトでファイルの大きさを示すとか、何バイト目から何バイト目で、音楽データの先頭を示すとか、沢山の取り決めがmp3ファイルフォーマットとして存在します。 世界で通じるフォーマットも多くありますし、個人で作ったプログラムでしか通用しないフォーマットもあり実に様々で多くあります。
- SPROCKETER
- ベストアンサー率26% (2128/8000)
1.文字と文字の区切りは”,”ピリオドや”.”コンマのような区切り記号と呼ばれるものを使います。 2.命令と命令の区切りは、BASIC時代は”:”マルチステートメントを使っていました。アセンブラでは改行コードを使います。 3.機械語では、あらかじめ命令の長さが決まっていて、1つの命令を実行した後は次の命令先に飛ぶようになっていますが、命令を中断する時にはソフトウェア割り込み命令などを使って中断します。 データの区切り判定や命令語の区切り判定はポインタを用意してアドレスをインクリメントしながらバイトやワード単位でメモリー内容の判定を繰り返しています。 コンピュータはビット単位では確かに0と1ですが、実際には8ビット単位(バイト)か、16ビット単位(ワード)で処理する例が多く、バイトやワードで判定や処理をしていると考えて良いです。現在では、32ビットや64ビット単位の処理が多くなっています。
- ariseru
- ベストアンサー率56% (928/1657)
>文字と文字の区切りや、命令と命令の区切りはどうやって識別されるのでしょうか? パソコン上で扱われる文字は、半角の1バイト文字と全角の2バイト文字の2種類しかありません。 1バイト文字というのは読んで字の如く、1文字=1バイトで構成されているもので、2バイト文字も同じく1文字=2バイトで構成されています。 つまり、1文字あたりのデータ容量が分かっているため、文字と文字の区切りなんてものは必要なく、データを1バイト分or2バイト分ずつ文字として表示するだけでいいんです。 ちなみに、改行とかに関しても"改行文字"ってものがあって、それがあったら改行するってことをやってます。 ちなみに、0と1の羅列を直接文章として読み込ませるなんてことは、一般的なプログラマーはやっていません。 プログラミング用ソフトなどの開発メーカーがその辺の処理を簡単にやれる機能を作ってくれているので、自分でプログラムを作るときは0と1から文字への変換なんかは意識する必要が無いんです。 shift-JISやUTF8やEUCなどといった文字エンコードの種類だけ指定しれやれば、簡単に0と1から文字列に変換した上でファイルを読み込めちゃいますから。 その変換処理をやっている部分というのは、一般人が触れることは無い部分なので意識する必要も理解する必要も普通はありません。
- chie65536(@chie65535)
- ベストアンサー率44% (8753/19861)
>区切りはどうやって識別されるのでしょうか? ハードディスクやメモリ上では「単にデータが並んでいるだけ」であり、区切りはありません。 区切りがあるとすれば「先頭から読んで行って、適当に決めた所で区切りにする」って決めただけで、区切りは「後付け」なんです。 例えば「0と1が8個集まったのを1バイトにする」って後から決めただけです。 >文字と文字の区切りや 後付けで「半角文字は1バイト(8ビット)にしよう」「全角文字は2バイトにしよう」って決めただけです。 >命令と命令の区切りは 後付け「この命令は1バイトで1つの命令、この命令は2バイトで1つの命令、この命令は3バイトで(以下略)」って決めただけです。 先頭からデータの並びを見ていって「このデータをプログラムコードだと仮定した時、3バイトで1つの命令の最初の1バイト目と同じだ。なので、ここから3バイトで1つの命令なのだろう」とコンピュータは判断して、3バイトのデータを取り出して、その命令を実行します。 なので、まったく同じデータの並びでも、CPUの種類が「全然違う」なら、全然違う命令語として解釈されちゃうので、CPUが異なるとプログラムは動作しません。 今、世の中には色々なCPUが出ていますが「Windows機で使えるCPUは命令の解釈方法を統一してある」ので、ペンティアムでもセレロンでもAMDでも、同じプログラムが動くのです。 --- そう言う訳で、データに区切りなんかありません。 データの並びを見て「後から決めてる」のです。
- neko-ten
- ベストアンサー率55% (1287/2335)
方法はいくらでも考えられるけど、一番わかりやすいのは01の数自体を決めることでしょう。 ビット列区切りを規定しておけば、中身にかかわらずそこで区切ればいいわけですから。 機械語も似たような実装をしてるけど、命令セットの内容によりけり。 たとえばasciiは8bitだし、一般的なマルチバイト文字は16bitです。 よく文字化けが起きるのはこの関連で、マルチバイト文字である日本語を8bitで読もうとすると、本来一文字である16bit分を8bit二つの文字として誤認してしまいます。 (もちろん逆もある) その結果、本来の文字とは違うよくわからない半角文字が現れることになります。 また、こういった長さで区切るために一文字で消費するbit数は固定されます。 もし「1」だけで表現できたとしても、「00000001」と表現する・・・といった感じに。