C では、文字はビットのパターンとして表されるため、char は実際には整数であると読みました。
ですから、プログラムを実行するときに、ビットパターンを数値または文字として出力するタイミングをオペレーティングシステムがどのように認識しているのか疑問に思います。どちらが印刷されるかを決定するコードは何ですか?
また、ASCII テーブルはどこにあり、変換はどのように行われるのでしょうか?
オペレーティング システムは、ビット パターンを数値または文字として出力するタイミングをどのように認識しますか。
そうではありません。に適切なフォーマット記述子を指定することにより、文字または整数として扱うかどうかをコンパイラに明示的に伝えますprintf
。フォーマット記述子と実際の引数の型が一致しないと、未定義の動作が発生するのはまさにそのためです。
コード内のビットを解釈するようにプログラムに指示する方法によって異なります。例えば、
printf("%d %c", 'a', 97);
これは印刷されます:97 a
Linux マシンを実行している場合は、ターミナルで man ascii と入力するだけで、すべての char 値 (10 進数、8 進数、および 16 進数) が表示されます。そうでない場合は、ASCIIテーブルをグーグルで検索するだけで、おそらく完了します。
... 文字はビットのパターンとして表されます。
コンピューター上では、文字、整数、実数、実行可能コードなど、すべてがビットのパターンとして表されます。8 ビット01000001
は、整数65
(通常、整数は少なくとも 16 ビットを占めます) またはA
ASCII システムの文字を表すことができます。何が何であるかを追跡する精巧な方法があります。これは、オペレーティング システムと高級プログラミング言語の主な役割の 1 つです。プログラマーが渡されるデータの種類を関数に明示的に伝えprintf
なければならないまれなケースの 1 つです。
C では、文字はビットのパターンとして表されるため、char は実際には整数であると読みました。
それは正しくありません。C では、char と int は非常に長い間異なる型でした。C では、言語設計者の選択により、必要に応じてachar
を an として使用できます。基本的に、ビット パターンは対応する として使用されます。C では、ビット パターンが役に立たないため、 aを an として使用できません ( のビットパターンは integer のビット パターンとはまったく異なります)。int
int
float
int
1.0
1
ASCII テーブルに関しては、テキストを表示するハードウェアとソフトウェア、およびそれを操作するプログラミング言語関数の設計に組み込まれています。コンピュータフォントは、数字から図形へのマッピングです。または「グリフ」。最も単純なケースでは、ASCII 範囲 (32 ~ 126) の数字を適切なグリフにマップします。(実際には、同じ結果へのより間接的なルートであることがよくあります)。Windows または X11 アプリケーションはソフトウェア フォントを使用しますが、古いコンピューター端末にはグリフが組み込まれていました。
プログラミング言語に関して言えば、isdigit()
またはisalpha()
単にそのプロパティのテーブルで文字コードを検索するような関数:数値 48 から 57 (ASCII 数字をエンコードする) とその他すべてをisdigit()
返します。グリフは含まれません。true
false