(浮动)C中的Typecast

时间:2015-10-05 00:11:54

标签: c casting typecast-operator

我目前正在学习C语言和类型转换,并建议如果我想将int转换为浮点数,我应该在变量之前加(float)来执行此操作。

然而,当我不使用类型转换时,答案仍然正确,即使我正在混合整数和浮点数。

有人可以解释为什么/何时我需要特别使用类型转换(float)

#include <stdio.h>

int main(void) {
    int A, B, E;
    float C, D;

    A = 2;
    B = 1;
    C = 12.5;

    D = C * A + B;
    E = C * A + B;

    printf("Total is %.1f\n", D);
    printf("total is %d", E);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

除非你想在float之间强制进行精确操作,否则你永远不需要明确地对int进行类型转换,例如

int a = 10;
int b = 3;

a / b会产生3类型的int(因为它是整数除法),而a / (float)b会产生3.3333..类型的float。< / p>

C语言规范另外确保您可以在必要时将整数类型隐式转换为float(例如,使用另一个float的操作)。此外,如果为float变量分配int值,则会发生缩小,在这种情况下,值会被截断。 (C11的第6.3.1.4节)

答案 1 :(得分:1)

按照惯例,如果表达式甚至有一个float变量,C会将算术表达式向上转换为float。因此,以下两个表达式最终将成为float

int A = 3;
float F = 1.0;
float result1 = A * F;  // result is 3.0
float result2 = A / F;  // result is also 3.0
float result3 = A - F;  // result is 2.0

在实际代码中,您有以下表达式:

D = C * A + B;

就操作顺序而言,我们可以像这样重写右侧:

((C * A) + B);

C将评估如下:

((float + int) + int)
((float) + int)
float