Float和int比较

时间:2015-09-08 16:49:28

标签: c floating-point int

在下面的程序中,我不明白float和int值是如何相同的。

int main()
{
    int a=3;
    float b=3.0;
    if(a==b)
    {
        printf("A is equal to b");
    }
    else{
        printf("A is not euql to b");
    }
}

程序的输出是“A等于b”

2 个答案:

答案 0 :(得分:3)

if(a==b)不比较类型,它会比较值。

@Kerrek SB所述,值(s)将转换为通用类型。

每个ab在比较之前通过“通常的算术转换”。

  

...具有浮动操作数的运算符产生的和值受常规算术转换和浮动常量的值被评估为范围的格式和精度可能比类型要求的更高。评估格式的使用以FLT_EVAL_METHOD的实现定义值为特征:C11dr§5.2.4.2.29

根据float,转换为浮点数为doublelong doubleFLT_EVAL_METHOD

假设转换为float ...:

  

否则,如果任一操作数的对应实数类型为float,则另一个操作数在不更改类型域的情况下转换为其类型为   对应的实际类型是float。 §6.3.1.81

在比较之前,a转换为float,其中3.0

由于值的比较相同,因此它们会传递if(a==b)

注意:转换可能会导致问题,因为并非所有int都可能完全转换为float

答案 1 :(得分:1)

实际上,int值将被类型化为float,然后评估if条件。