在最近的一次家庭作业中,有人告诉我使用long
变量来存储结果,因为它可能是一个很大的数字。
我决定在我的系统(intel core i5/64-bit 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
无法容纳。
家庭作业本身不是这里的问题。我想知道在 where 的系统上int < long
,我应该如何分配一个int
to long ?
我知道关于这个主题有 许多 密切相关的问题,但我觉得这些 问题的答案并不能让我完全理解这个过程中将会发生什么或可能发生什么。
基本上我想弄清楚以下几点:
- 我应该在分配之前投到
long
,int
还是因为直接分配会被认为是无害的吗?long
不是不同的数据类型,而只是一个修饰符, - 系统上会发生什么
long > int
?结果会是未定义的(或不可预测的)还是会导致变量的额外部分被省略? long
从to的转换如何int
在 C 中工作?- 当我不使用强制转换时,从
long
to的分配如何在 C 中工作?int