C について話している本を読みました。最初にコードを提示し、後者で質問する方がよいでしょう。
最初のコード
#include <stdio.h>
int main(void)
{
short num = 3;
printf("%hd\n" , num );
return 0;
}
セカンドコード
#include <stdio.h>
int main(void)
{
short num = 3;
printf("%d\n" , num );
return 0;
}
特記事項: Intel ベースの PC を使用しているため、int サイズは 32 ビットです。
質問 :
1.) 本書では、この 2 つのコードは正しく実行できると述べてい%hd
ますが、一方は指定子を使用し、もう一方は指定子を使用してい%d
ます。
2.)本からの理由は、C メカニズムが自動的に型shortをintに変換して計算を高速化するため、%d
指定子を使用するか、 %ld
32 ビットであっても正しい結果が得られるからです。
3.)私の質問は、いつこの変換が発生したのですか?それprintf()
は、式または引数として渡されたときに float 変数が double に変換されるのと同じように、関数に引数として渡したときですか?変数を値で初期化するまでに3
??
4.)実際に私は小さな実験をしました。つまり、関数とsizeof
一緒に演算子を使用して変数 num のサイズを出力することです。printf()
2 bytes
5.) short 変数に値を代入している間にコンバージョンが発生した場合、short 変数を作成する意味は何ですか?? (**そうでない場合、この質問は無視してください)
あなたの助けは大歓迎です