在最近的一次作业中,我被告知要使用long
变量来存储结果,因为它可能是一个大数。
我决定检查一下,在我的系统上(intel core 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
也会太大而无法容纳。作业本身并不是问题所在。我想知道,在一个
int < long
的系统中,如何将 int
赋值给 long
?
我知道在这个主题上有许多相关的问题(链接1) (链接2) (链接3) (链接4) (链接5),但我觉得这些答案并没有给我完全理解该过程中可能发生的情况。
基本上,我正在尝试弄清楚以下问题:
- 在赋值之前,我应该把
long
转换成int
吗?还是直接赋值会被认为没有害处,因为long
只是一个修饰符而非不同的数据类型? - 在
long > int
的系统上会发生什么?结果会是未定义的(或不可预测的)还是会使变量的额外部分被省略? - C语言中从
long
转换为int
的转换是如何工作的? - 如果我不使用强制类型转换,在C语言中从
long
赋值给int
是如何工作的?
volatile
,const
),但short
、long
、signed
和unsigned
不是修饰符,它们指定了独立的类型。 - Mooing Duck