在最近的家庭作业中,我被告知使用长变量来存储结果,因为它可能是一个大数字。
我决定检查是否真的对我来说,在我的系统(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来说,太大都不会持有,将太大,长期持有。
作业分配本身不是这里的问题。我不知道如何,在一个系统上int < long,我应该分配一个int到long? 我知道there are numerous closely related这个问题的事实,但我觉得这些答案不提供我完全理解什么将在或可能发生的过程。
基本上我想弄清楚下面:
>我应该在分配之前将long转换为int,或者从长到long
是不是一个不同的数据类型,而只是一个修饰符,它会
认为不伤害直接分配?
>在long> int?将结果是
未定义(或不可预测)或它会导致额外的部分
变量要省略?
>从long到int如何在C中工作?
>从long到int的赋值在C中是如何工作的
使用铸件?