最近の宿題で、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