C语言中为什么0.0 == 0结果为真,分支语句中0.0会被判定为假?
C语言中0.0被判定为假的原因
这是C语言标准明确定义的运算规则,和是否显式转换int没有关系,核心逻辑如下:
1. 等值比较的隐式转换规则
第一段代码中0.0 == 0输出1,是因为C语言的常用算术转换规则:当双目运算符两侧操作数类型不同时,会自动将低精度类型向高精度类型转换对齐。这里0是int类型,0.0是double类型,所以int类型的0会先隐式转换为double类型的0.0,最终比较的是两个值相等的浮点数,结果自然为真。
2. 逻辑运算与条件判断的真值规则
第二段代码的结果符合!运算符的标准定义:
C语言明确规定,逻辑非运算符!的运算规则为:
- 若操作数的值等于0(不管操作数是整数、浮点数、指针类型),返回1
- 若操作数的值不等于0,返回0
且!E表达式完全等价于0 == E,也就是说!0.0本质上和第一段代码的0.0 == 0是完全等价的运算,结果自然为1,所以if条件成立,输出对应内容。
这里不存在"浮点数转int再判断"的操作:C语言的真值判定只看值是否等于0,浮点数的0.0本身就是0值,直接就会被判定为假,不需要额外转换为int类型。
内容的提问来源于stack exchange,提问作者peng xie
相关产品推荐
相关产品推荐

