如何使用隐式和显式转换?

时间:2010-03-16 02:18:54

标签: c casting implicit-cast

  

可能重复:
  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;

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

隐式演员: real_result = a * f;

明确演员: real_result =(int)(a * f);


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

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

    1. 因为real_result的类型 int 可能会很小以存储 a * f(double)的结果 - >您的程序中可能存在逻辑错误(信息丢失)。

    2. 有些编译器会显示警告,注意你的逻辑错误,如果你确定你的表达式的逻辑,你可以告诉编译器通过使用显式的强制转换来中止这个警告:
      real_result =(int)(a * f);

答案 2 :(得分:0)

int a = 2,b = 3;

float f = 2.5;

double d = -1.2;

int int_result;

float real_result;

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

d = a + b / a * f;

d = f * b / a + a;

您无法实现隐式转换。隐式强制转换由编译器实现。

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

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