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 :(得分: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;
因为real_result的类型 int 可能会很小以存储 a * f(double)的结果 - >您的程序中可能存在逻辑错误(信息丢失)。
有些编译器会显示警告,注意你的逻辑错误,如果你确定你的表达式的逻辑,你可以告诉编译器通过使用显式的强制转换来中止这个警告:
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的值
在将大数据类型值转换为小于它的数据类型时会丢失一些精度。