2

我们是否可以将值类型转换(如 int 到 float 转换)视为向上转换,将 float 到 int 视为向下转换?我相信当我们谈论向上转换和向下转换时,我们特别指的是参考转换。

4

4 回答 4

9

不,值类型之间的转换不能被视为向上转换或向下转换,因为它们不共享层次结构链接(它们不以任何方式或形式相互继承)。

向上转型意味着您正在将子类型引用更改为超类型引用。

向下转型则相反。

于 2013-04-08T13:47:09.790 回答
0

不,浮点数不是 int 的特例(IE 子类)。它们是不同的类型。

于 2013-04-08T13:47:50.537 回答
0

不,向上和向下转换仅在继承上下文中有效。当您在可以容纳更多或更少数据的值类型之间进行转换时,您使用的是普通类型转换。其中,有两种不同的类型: 1. 隐式转换。这些是可以进行的转换,因为转换是“安全的”,即不会丢失数据。例如,您可以安全地将int值转换为long值。2. 显式转换。这些转换可能会导致数据丢失,因此您必须进行显式转换才能进行转换。例如,将long值转换为 anint是不安全的。

更多导入见:http: //msdn.microsoft.com/en-us/library/ms173105.aspx

于 2013-04-08T13:51:24.600 回答
0

正如其他人所描述的,这些不是向上转换和向下转换的示例。但是,我们可以讨论扩大和缩小原始类型转换(例如,从 int 到 long 是扩大转换,因此可以隐式完成。)然而,在这种特殊情况下(float/int),转换有点不同的。

存在从 int 到 float 的隐式转换,但由于 float 无法准确表示整数,因此转换实际上仍会丢失精度。这是值得知道的,因为它违反了隐式转换永远不应该丢失信息的一般规则。仅当您将整数转换为浮点数,对它们进行一系列累积数学运算,然后尝试转换回整数时,这才真正值得注意。在这些情况下,如果您假设浮点数是十进制数的完美表示,则近似误差会累积,从而产生不正确的结果。

于 2013-04-08T14:00:56.533 回答