作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的 c 代码片段中隐式类型转换是如何发生的?输出是什么?
#include<stdio.h>
void main()
{
float f = (1/2)+(1.0/2)+(1.0/2.0);
double d = 1/2;
printf("%f \n %d",f,d);
}
最佳答案
1/2 是一个整数除以一个整数,得到一个整数值,即 0(.5 被截断)
1.0/2 是一个整数除以一个 double 值。因此 2(整数值)被提升为 double 类型,然后进行除法,给出一个 double 值。所以结果值为 0.5。
1.0/2.0 会导致一个 double 除以另一个 double ,结果在 double 类型中只是 0.5。
最后将所有这些相加得到 1.0,它是 double 类型。然后将其转换为 float 类型,因为 f 是 float 类型变量。
此外,使用 %d 说明符打印 double 类型值会导致未定义的行为。参见此 post
关于c - C 中的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32287891/
我是一名优秀的程序员,十分优秀!