在最近的一项家庭作业中,有人告诉我使用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
换句话说,在我的系统上,long和int是相同的,并且对于int来说太大而无法容纳,对于long来说太大也将无法容纳。
作业分配本身不是这里的问题。 我想知道如何在long的系统上将int分配给long?
我知道以下事实:与此主题相关的问题很多,但我觉得这些问题的答案并不能使我完全理解过程中将会发生或可能发生的情况。
基本上,我试图找出以下几点:
我应该在作业前将long投射到int还是自long不是不同的数据类型,而只是修饰符,这将是认为直接分配无害吗?
在long的系统上会发生什么? 结果会是不确定(或无法预测),否则会导致要忽略的变量?
从long到int的转换如何在C中工作?
当我不这样做时,从long到int的分配如何在C中工作使用铸造?