C语言的数据类型问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:39:30
main()
{
float a;
a=1/2;
printf("%f",a);
}
为什么结果是0啊?
我试过a=1.0/2 或a=1/2.0 都能得0.500000啊
这是怎么回事?老师说a=1/2 电脑会自动做隐式转换吧1/2换为
1.0/2.0啊,问老师他也没解释清楚。

当两种(或多种)类型数据运算时,会自动转换成精度高的进行计算,如1.0/2转成1.0…/2.0…”计算得到0.50…,而类型一样时则不转换,因此1/2不再转换成浮点型了,故为0。懂了吗?

1 和1.0 2和2.0是不一样的,1/2 中1 2都被看作是int型,所以结果也是int型,而a是float型,所以在把结果转换成float,所以结果当时是0; 如果把1改成1.0 或者2改成2.0 或者两个都改变,那么就按照float计算结果,a=0.5。

1/2是求商,1和2都是整型,两个做求商结果为0。因为a是float型,0会隐式转换成0。000000
当式子为1.0/2 或者1/2.0时,表达式中有浮点数,这样在计算之前编译器会隐式的把短字节的类型转换为长字节类型,(在有些编译器中int可能只占2个字节)。所以这两个表达式实际上都是在计算1.0/2.0。因为结果也是浮点数,结果就不存在取商的说法了。所以结果是0.50000