-5

可能重复:
识别隐式转换和显式转换

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;
4

3 回答 3

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

于 2010-03-16T05:44:34.667 回答
1

隐式转换:real_result = a * f;

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


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

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

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

  2. 一些编译器会显示警告以通知您的关于逻辑错误,如果您确定表达式的逻辑,您可以通过使用显式转换告诉编译器中止此警告:
    real_result = (int)(a * f);

于 2010-03-16T10:02:39.820 回答
0

整数a = 2,b = 3;

浮动 f = 2.5;

双 d = -1.2;

int int_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 的值

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

于 2010-03-17T07:34:32.487 回答