C 浮点与整数比较
在下面的程序中,我不明白float和int值是如何相同的C 浮点与整数比较,c,floating-point,int,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”实际上,int值将被类型化为float,然后计算if条件。如果(A==b)不比较类型,则比较值
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”实际上,int值将被类型化为float,然后计算if条件。
如果(A==b)
不比较类型,则比较值
如注释所示,值将转换为通用类型 每个
a
和b
在比较之前都要进行“常规算术转换”
。。。由具有浮点操作数和值的运算符生成的值以及经过常规算术转换的和浮点常量的值将被计算为范围和精度可能大于类型要求的格式。评估格式的使用以FLT_EVAL_方法的实施定义值为特征
:C11dr§5.2.4.2.2 9
根据FLT\u EVAL\u方法,浮点转换为float
、double
或long double
假设转换为浮动
:
否则,如果任一操作数的对应实数类型为float
,则另一个操作数将转换为
相应的实数类型是浮点
。§6.3.1.8 1
因此,在比较之前,a
转换为值为3.0
的float
由于这些值比较相同,因此如果(a==b),它们将传递
注意:转换可能会导致问题,因为并非所有的int
都会精确转换为float
不存在异构比较。在表达式a==b
中,首先将操作数转换为公共类型。问题是什么?int
转换为float
,并与b
进行比较。对于值3,转换后的值恰好与3.0匹配。另请参见: