Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 浮点与整数比较_C_Floating Point_Int - Fatal编程技术网

C 浮点与整数比较

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)不比较类型,则比较值

在下面的程序中,我不明白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)
不比较类型,则比较值


如注释所示,值将转换为通用类型

每个
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匹配。另请参见: