1

C++ などのコンパイラによってデータ型がどのように処理されるかを理解するのに苦労しています。キーボードから何かを入力すると、123 などの数字が表示されますが、同じ数字が画面に表示されますが、データの種類に応じて異なる方法で格納されます。同じキーボード ストロークが入力された場合でも、データ型を変換する背後にあるアルゴリズムは何ですか? 数値の格納方法と表示方法が異なるのはなぜですか? たとえば、上記の場合、数値 123 が int 型の場合は 01111011 (1 バイト) として格納されますが、文字列型の場合は 3 バイト (数値ごとに 1 バイト) で格納されます。しかし、どちらの場合も、画面には同じ数字が表示されます。コンピューターは数値の保存と表示に異なるバイトを使用しますか? 私の質問は、数値を入力するとASCIIテーブルを通過し、その数値のcharコードを検索してから、コンパイラーが何らかの処理を行ってその数値を適切なデータ型に格納し、その数値を表示することですか?

ありがとうございます

4

1 に答える 1

1

この質問に適切に答えるには、コンパイラに関する本を手に入れたいと思うでしょうが、特に数値文字列の場合は、コンパイルの字句解析フェーズでこれを行います。

コンパイラはプログラムのテキストをスキャンし、トークンを形成しようとします。これらは構文の基本的な構成要素になるため、文字列、{、数値など...

だから、あなたがこのようなものを得たとしましょう

int i = 10

コンパイラはこの行をスキャンし、トークンを作成しようとします。最初に i、n、t をスキャンし、スペースに到達すると停止します。これは、スペースを区切りとして扱うためです。内部リストに対して値「int」をチェックし、適切なトークンを生成します。

文字列を続けて、変数 i、等号、数値を検出します。

文字列「10」から数字を伝える方法はおそらく引用符ですが、これは言語によって異なります。

これが、long 値または float 値を作成していることを示す 10L や 10f などがある理由です。そうしないと、コンパイラは判断できませんでした。

http://en.wikipedia.org/wiki/Lexical_analysis http://en.wikibooks.org/wiki/Compiler_constructionを参照してください。

またはおそらくhttps://www.coursera.org/course/compilers

于 2013-02-01T06:07:18.697 に答える