最近の宿題で、long
変数を使用して結果を格納するように言われました。これは、数値が大きい可能性があるためです。
私のシステム(インテルコアi5 / 64ビットWindows 7 / gnu gccコンパイラ)で、それが私にとって本当に重要かどうかを確認することにし、次のコードを見つけました:
printf("sizeof(char) => %d\n", sizeof(char));
printf("sizeof(short) => %d\n", sizeof(short));
printf("sizeof(short int) => %d\n", sizeof(short int));
printf("sizeof(int) => %d\n", sizeof(int));
printf("sizeof(long) => %d\n", sizeof(long));
printf("sizeof(long int) => %d\n", sizeof(long int));
printf("sizeof(long long) => %d\n", sizeof(long long));
printf("sizeof(long long int) => %d\n", sizeof(long long int));
次の出力が生成されます。
sizeof(char) => 1
sizeof(short) => 2
sizeof(short int) => 2
sizeof(int) => 4
sizeof(long) => 4
sizeof(long int) => 4
sizeof(long long) => 8
sizeof(long long int) => 8
言い換えれば、私のシステムでは、int
とlong
は同じであり、大きすぎて保持できないものは、大きすぎint
て保持できませんlong
。
宿題自体はここでは問題ではありません。システムで を long にどのようint < long
に割り当てればよいint
のでしょうか?
この件に関して密接に関連する質問が多数ある ことは承知していますが、これらの質問に対する回答だけでは、その過程で何が起こるか、または起こる可能性があるかを完全に理解することはできないと感じています.
基本的に私は次のことを理解しようとしています:
- 割り当ての前にキャスト
long
する必要がありますか、またはint
は直接割り当てることは無害と見なされますか?long
別のデータ型ではなく、単なる修飾子であるため、 - システムで何が起こる
long > int
か? 結果は未定義 (または予測不能) になりますか、それとも変数の余分な部分が省略されますか? long
からへのキャストint
はCでどのように機能しますか?- キャストを使用しない場合、C での代入はどのよう
long
に機能しますか?int