【问题标题】:(Float) Typecast in C(浮点数)C 中的类型转换
【发布时间】:2015-10-05 00:11:53
【问题描述】:

我目前正在学习 C 和类型转换,这表明如果我想将 int 转换为 float,我应该在变量前面加上 (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;
}

【问题讨论】:

  • 你的代码没问题。你的学习材料不是很好。除非没有其他选择,否则应避免强制转换。
  • MM,我正在使用“C 编程绝对初学者指南”,还有比这更好的书吗?谢谢
  • See this thread 一些建议
  • 我没有具体的建议,该帖子中任何被赞成的东西都应该是好的
  • C 不使用术语“类型转换”。 (float) 是强制转换运算符的一个示例。它指定显式类型转换。类型转换也可以在许多上下文中隐式完成。事实上,大多数转换应该是隐式的,任何使用强制转换运算符都应该被怀疑。

标签: c casting typecast-operator


【解决方案1】:

您永远不需要显式类型转换为float,除非您想强制在ints 之间进行精确操作,例如

int a = 10;
int b = 3;

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

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

【讨论】:

    【解决方案2】:

    按照惯例,如果表达式有一个 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
    

    【讨论】:

    • 这不是很好的措辞,例如float = int / int + float 仍然做整数除法
    猜你喜欢
    • 2013-04-02
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2013-09-13
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多