我不明白为什么这些数字会像他们在c ++中那样出现

时间:2013-03-25 19:17:36

标签: c++ floating-point integer double

我运行这些代码,但我得到了一个非常奇怪的数字。我是c ++的新手

ii)预测以下代码片段的输出:

A)

int x=75, y=105;
printf(" %c %lf " , x,y);

对于我得到的第一个x等于K.我明白了 但是因为我得到0,是因为它被声明为int而不是double?

b)中

float pH=5.65582; 
printf (" %d %lf" , pH,pH);

现在这个很奇怪。对于第一个pH值,它是1073741824.我甚至不知道他们是如何得到它的。而对于第二个pH值是2.如何? c)中

float p=0.345689;
double q=0.445566778899;
printf ( "%d %f %lf" , p*q, p*q, p/q);
printf ("%d %0.5f %9.3f", p+q , p-q, p*(p+q));

p * q -1713662420

p * q -0.000000

p / q -0.000000

p + q -1561213759

p-q 0

p *(p + q)是一个非常长的数字

591890496450433740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您使用错误的printf格式说明符来表示您传递的参数类型。

要打印floatdouble值,请使用"%f""%g""%e"或某些变体。对于int参数,请使用"%d"

通过使用特定的格式字符串,您承诺传递正确类型的参数。如果你没有这样做,那你就是骗printf,结果是未定义的行为。不要那样做。

(可能发生的事情是,例如,printf正在表示你实际给它的int参数,而假设表示它是一个表示double对象。但是不要浪费时间搞清楚为什么会得到你所做的结果。只需修改代码。)

答案 1 :(得分:1)

doublefloat以及int的实际代表在机器内部非常不同。 printf中的格式说明符不正确将尝试将此二进制表示解释为特定类型。

垃圾进入 - 垃圾输出