类型转换输出

时间:2012-10-01 14:57:52

标签: c type-conversion

#include <stdio.h>

main()
{
    float x;
    x = (float)3.3==3.3;
    printf("%f",x);

    x=(float)3.5==3.5;
    printf("\n%f",x);
}
我很困惑 在第一种情况下,答案是0.000 在第二种情况下,答案是1.00 任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

表达式

(float)3.3==3.3

首先将double值转换为float精度,从而更改其值,因为它在目标类型中不能完全表示。然后将float值转换回double,而不更改比较的值`,导致比较返回0(false)。 3.5在两种类型中都是完全可表示的,因此比较返回true(1)。

然后,在这两种情况下,比较的int结果都会转换为float以进行分配。

答案 1 :(得分:0)

默认情况下,右侧数字被拼写为双倍而不是浮点数。为了使两个案例都打印1,您需要将浮动类型转换更改为double或将第二个数字强制转换为float:

float x;
x = (float)3.3==(float)3.3;
printf("%f",x);
x=(float)3.5==(float)3.5;
printf("\n%f",x);

或:

float x;
x = (double)3.3==3.3;
printf("%f",x);
x=(double)3.5==3.5;
printf("\n%f",x);