在下面的程序中,我不明白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”
答案 0 :(得分:3)
if(a==b)
不比较类型,它会比较值。
如@Kerrek SB所述,值(s)将转换为通用类型。
每个a
和b
在比较之前通过“通常的算术转换”。
...具有浮动操作数的运算符产生的值和值受常规算术转换和浮动常量的值被评估为范围的格式和精度可能比类型要求的更高。评估格式的使用以
FLT_EVAL_METHOD
的实现定义值为特征:C11dr§5.2.4.2.29
根据float
,转换为浮点数为double
,long double
或FLT_EVAL_METHOD
。
假设转换为float
...:
否则,如果任一操作数的对应实数类型为
float
,则另一个操作数在不更改类型域的情况下转换为其类型为 对应的实际类型是float
。 §6.3.1.81
在比较之前,a
转换为float
,其中值为3.0
。
由于值的比较相同,因此它们会传递if(a==b)
。
注意:转换可能会导致问题,因为并非所有int
都可能完全转换为float
。
答案 1 :(得分:1)
实际上,int值将被类型化为float,然后评估if条件。