可能重复:
识别隐式转换和显式转换
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;
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=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
隐式转换:real_result = a * f;
显式转换:real_result = (int)(a * f);
我将在您的帖子中解释其中一个表达式:
表达式: real_result = a * f;
因为 real_result 的类型是int可能太小而无法存储a*f (double) 的结果-> 您的程序中可能存在逻辑错误(信息丢失)。
一些编译器会显示警告以通知您的关于逻辑错误,如果您确定表达式的逻辑,您可以通过使用显式转换告诉编译器中止此警告:
real_result = (int)(a * f);
整数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 的值
在将大数据类型值转换为小于它的数据类型时会丢失一些精度。