多少奇妙なことに、Cはchar型ではなく、文字定数をint型として扱います。例えば、32ビットのintを有するASCIIシステムと8ビットの文字コードデータ型の格納char
char grade = 'B';
に32ビット単位で格納されている数値66として'B'
を表すが、等級は66で巻き取ります8ビット単位で格納される。 この行について説明してください。
多少奇妙なことに、Cはchar型ではなく、文字定数をint型として扱います。例えば、32ビットのintを有するASCIIシステムと8ビットの文字コードデータ型の格納char
char grade = 'B';
に32ビット単位で格納されている数値66として'B'
を表すが、等級は66で巻き取ります8ビット単位で格納される。 この行について説明してください。
grade
はchar
であり、式int
の式で初期化されています。これは完全に正当なものであり、int
の値は暗黙的にタイプchar
に変換されます。任意の算術型の値は、他の算術型に暗黙的に変換できます。
このような暗黙的な変換は、時間の99%、文字定数がタイプint
であることが問題ではないという理由です。そのような定数は文脈に応じて適宜変換される。
は(C++文字定数でタイプchar
であることに注意してください。CおよびC++は、2つの異なる言語であることを忘れないでください。)
@PSkocik:編集をありがとう。私は何を意味しているのか分かっていた、それは私の指が私のためにタイプしたものに対応していなかった。 –
これは、Cがどのように動作するかです。文字定数は、C言語ではint型です。 –
必ずしも8ビット単位である必要はありません。他の幅にすることもできるし、歌うこともでき、すべての実装を定義することができます。 – user3528438
@ user3528438; OPは "8ビット単位"ではなく "8ビット単位"と言っており、 'int'は32ビット、' char'は8ビット、システムはASCIIを使用するという*仮定*を明示しています。 –