2010-03-16 69 views
-5

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

你能给我们更多关于你想要做什么的细节吗?最终结果应该是什么,或者其中的任何变量是什么? – Tarka 2010-03-16 02:23:10

+0

这是一个更正: 它是一个家庭作业 int a = 2,b = 3; float f = 2.5; double d = -1.2; in tint_result; float real_result; (1)real_result = a * f; (2)real_result =(float)a * b; (3)d = a + b/a * f; (4)d = f * b/a + a; – user292489 2010-03-16 02:46:36

+0

我已经更新了代码和标题,但我仍然不清楚你的问题是什么。此外,您可以编辑自己的问题以添加所需的任何新信息。 – 2010-03-16 03:06:08

回答

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

隐式转换:REAL_RESULT = A * F;

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


我会解释表达的一个在您的文章:
表达:REAL_RESULT = A * F;

  1. 角色一个INT - >
  2. 计算结果:INT一个* F铸造结果的一个* F
  3. 然后将结果设置为real_result

  1. 因为REAL_RESULT的类型是INT可能是小的结果存储到一个* F(双) - >你可能在你的程序(损失有一个逻辑错误信息)。

  2. 一些编译器会显示警告通知你关于逻辑错误,如果你确信你表达的逻辑,你可以告诉编译器使用显式类型转换中止这样的警告:
    REAL_RESULT =( int)(a * f);

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;/*这是一个明确的演员。在这里,你强制转换a * b的结果为float。 */

d = a + b/a * f;

d = f * b/a + a;

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

要小心,同时实施明确的演员。因为在显式强制转换变量me的值时,将大数据类型值转换为小于它的数据类型时会失去某种精度。