実際、ループを使用してコードをより効率的にする方法について研究しました。これにより、特定のコードブロックを何度も入力せずに繰り返す必要があり、学んだことを使用しようとした後、何かをプログラムするにはほど遠いので、次の章に進み、制御ステートメントを使用してプログラムに決定を指示する方法を学ぶ時が来たと感じています。
しかし、問題は、私がそれに進む前に、以前のものについて専門家の助けが必要ないくつかの質問がまだあるということです. 実際にはデータ型についてです。
A. キャラクタータイプ
- 本 C 入門プラス第 5 版から以下を抜粋します。
やや奇妙なことに、C は文字定数を
intではなく 型として扱いcharます。たとえば、32 ビットintと 8ビットの ASCII システムでcharは、コードは次のようになります。char grade = 'B';
'B'は 32 ビット単位で格納された 66 を数値として表し、grade8 ビット単位で格納された 66 の ub ab で終わります。'FATE'文字定数のこの特性により、32 ビット単位に格納された 4 つの別個の 8 ビット ASCII コードを使用して、などの文字定数を定義することができます。ただし、このような文字定数を変数に割り当てようとするとchar、最後の 8 ビットしか使用されないため、変数は値を取得します'E'。
したがって、これを読んだ後に私が次に行ったことは、もちろん、それが言及していることに従い
FATEましたchar grade.アウト、私が得るものは.printf()'E''F'これは本に間違いがあるということですか?または私が誤解したことがありますか?
上記の文から、C は文字定数を type として扱うという行があり
intます。試しに、型に255, (ex356)より大きい数値を割り当てcharます。356は 32 ビットの範囲内にあるため(Windows 7 を実行しています)、指定子を使用するとint出力されると予想されます。356%dしかし、 を出力する代わりに、最後の 8 ビット値である が
356得られます。100なぜこれが起こるのですか?私は思った
char == int == 32-bits?(char がバイトにすぎない前に言及していますが)。
B. Int 型と Floating 型
型の変数に格納された数値が
short可変引数関数または暗黙のプロトタイプ関数に渡されると、自動的にint型に昇格されることを理解しています。これは浮動小数点型にも起こります。型を持つ浮動小数点数
floatが渡されると、double型に変換されます。そのため、型の指定子はなく、代わりにforとforfloatしかありません。%fdouble%Lflong doubleしかし、
short昇格されてもタイプではないのに、なぜタイプの指定子があるのfloatでしょうか?float修飾子などを使用して型の指定子を指定しないのはなぜ%hfですか? この背後に論理的または技術的な何かがありますか?