简单的C问题

时间:2010-11-22 12:45:49

标签: c

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

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

main()
{
long int c = X*Y*Z;
printf("%ld",c);
}

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

4 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:3)

问题是常量不会被解释为长整数,只有在计算表达式后才会转换为长整数。您可以在表达式中转换它们来解决这个问题,或者只是将它们定义为长常量。另外,如果长度可能不够,则应该使用long long代替它。

答案 2 :(得分:1)

是的,你正在溢出。答案将不适合32位有符号整数,long int为。你必须使用64位类型,这很长。

另外,你应该进行类型转换,否则中间计算会溢出。

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

main()
{
long long c = (long long)X*Y*Z;
printf("%lld",c);
}

答案 3 :(得分:0)

#define     X   2527.0
#define     Y   2463
#define     Z   3072

main()
{
double c = X*Y*Z;
printf("%lf",c);
}

你也可以使用双倍。