简单的C问题

cbp*_*cbp 5 c

我出生在现代世界,所以我不经常需要处理这类事情,但有人可以解释如何在以下代码中获得正确的数字.这是许多人的一次尝试:

#define     X   2527
#define     Y   2463
#define     Z   3072

main()
{
long int c = X*Y*Z;
printf("%ld",c);
}
Run Code Online (Sandbox Code Playgroud)

我只是想打印一个长整数,但它总是打印错误的结果.我得到整数溢出 - 如果是这样我怎么能防止它们?或者它是我选择的printf格式化程序?

Svi*_*ack 8

溢出是可以的,因为您尝试将34位数写入32位变量(long int).

使用long long int%lld格式字符串.

#define     X   2527LL
#define     Y   2463LL
#define     Z   3072LL

main()
{
long long int c = X*Y*Z;
printf("%lld",c);
}
Run Code Online (Sandbox Code Playgroud)

  • 请为这些常数编辑'l'到首都'L'.使用'l'表示longs是一种不好的做法(显然出于同样的原因,我们不使用'l'来表示循环变量). (3认同)