编译此代码后:
#include <stdio.h>
int main()
{
long int a = 1000 * 1000 * 1000 * 1000 * 1000 * 1000;
printf("%i\n", a);
return 0;
}
结果我得到-1486618624
。如何使此代码有效?
提前感谢您的任何答案!
答案 0 :(得分:2)
您指定的1000
的实例为int
s,因此乘法是通过乘以int
并获得int
来实现的。在将其分配给long int
之前,它会溢出。尝试:
long int a = 1000L * 1000L * 1000L * 1000L * 1000L * 1000L;
此外,您还需要使用long int
格式打印答案,例如:
printf("%ld\n", a);
注意long int
也可能太小(如果你在某些32位平台上,long int
中的最大存储空间是2^31 - 1
,而在64位平台上它是{{1}这就足够了,在这种情况下尝试:
2^63 - 1
答案 1 :(得分:2)
即使您要分配给long int
,您的每个1000
都是int
,因此计算机会尝试将结果计算为int
。超过最大int
大小的数字会溢出,导致它绕过&#34;环绕&#34;并被视为负面因素,因为用于int
的一部分内存是负面标记。
您需要使用1000
或1000L
投射(long int) 1000
s。您的%ld
中还需要%i
而不是printf
。
答案 2 :(得分:1)
尝试使用
long long var=1000LL*1000LL*1000LL; // append LL
printf("%lld",var);