【问题标题】:How do I use implicit and explicit casts? [duplicate]如何使用隐式和显式强制转换? [复制]
【发布时间】:2010-03-16 02:18:53
【问题描述】:

可能重复:
Identify the implicit cast and explicit cast

int a = 2, b = 3;
float f = 2.5;
double d = -1.2;

int int_result;
float real_result;

real_result = a * f;
real_result = (float) a * b;
d = a + b / a * f;
d = f * b / a + a;

【问题讨论】:

  • 您能否详细介绍一下您要做什么?最终结果应该是什么,或者任何变量是什么?
  • 这里有一个更正:这是一个家庭作业 int a =2, b = 3;浮动 f = 2.5;双 d = -1.2;在 tint_result 中;浮动真实结果; (1) real_result= a * f; (2) real_result = (float) a * b; (3) d = a + b / a * f; (4) d = f * b / a + a;
  • 我已经更新了代码和标题,但我仍然不清楚你的问题是什么。此外,您可以编辑自己的问题以添加所需的任何新信息。
  • 您是否在此处阅读了您的问题的答案? stackoverflow.com/questions/2434225/….

标签: c casting implicit-conversion


【解决方案1】:

如果没有信息丢失,编译器将提升您的数据类型:

int a=3;
float b=a; //b=3.0f

如果信息丢失,编译器应该降级并发出警告:

float b=4.3;
int a=b;  //a=4

[

short a=2000;
int b;
b = (int) a;    // c-like cast notation
b = int (a);    // functional notation

]1

【讨论】:

    【解决方案2】:

    隐式转换:real_result = a * f;

    显式转换:real_result = (int)(a * f);


    我将在您的帖子中解释一种表达方式:
    表达式:real_result = a * f;

    1. int 转换 a -> double
    2. 计算结果:a * f
    3. a * f 的结果从 double 转换为 int,然后将结果设置为 real_result

    1. 因为 real_result 的类型是 int 可能太小而无法存储 a*f (double) 的结果 -> 你可能有逻辑错误程序(信息丢失)。

    2. 1234563 >real_result = (int)(a * f);

    【讨论】:

      【解决方案3】:

      int a = 2, b = 3;

      float f = 2.5;

      双 d = -1.2;

      int int_result;

      float real_result;

      real_result = a * f; /* 这里隐式转换由编译器应用到变量 a。其中变量 a 首先被提升为隐式浮动,然后执行表达式。 */ real_result = (float) a * b; /* 这是一个显式转换。在这里,您将 a*b 的结果强制转换为浮点数。 */

      d = a + b / a * f;

      d = f * b / a + a;

      您不能实现隐式转换。隐式转换由编译器实现。

      在实现显式转换时要小心。因为在显式转换变量 me 的值

      在将大数据类型值转换为小于它的数据类型时丢失了一些精度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多