编译时的隐式转换

FSo*_*ou1 6 .net c#

我们知道,由于编译时数据丢失,double文字值不会被隐式转换为float:

在此输入图像描述

我们也知道int也不会隐式转换byte为,但在这种情况下,考虑到文字是int,它的工作原理:

在此输入图像描述

您是否介意向我解释在那里发生的过程以及它如何在引擎盖下工作?

InB*_*een 5

文字整数是常量,它永远不会改变.因此,如果隐式转换是安全的,编译器可以在编译时推断出来,如果它是,它足够好,可以为你做.

这也是byte i = 300;编译时失败的原因.

当转换为非常数值时,不能说同样的情况; 一个变量.编译器无法知道i将是什么值,因此隐式转换是不安全和不允许的.

至于为什么这种行为与和双精度浮点数(见注释)似乎关闭:原因是,有在语言文字的浮动,因此,如果你想有一个浮动的文字,用文字的浮动.没有字节或短文字,所以编译器会帮助你

此外,将有效值拟合int为a byte意味着不会丢失数据/精度; 这些位是相同的,你只是截断高端的0位.将a转换double为a 时,同样不能说float.任何给定数字作为单精度或双精度浮点数的表示都是根本不同的,并且存在固有的精度损失.按理说,语言设计决策在两种情况之间都有所不同,因为它们完全不同.

  • @YeldarKurmangaliyev`4.2`是**双** - 常数.`4.2f`是**浮点** - 常数.99是**字节** - 常数.然而,字节是可以转换为int,使`int i = 99`工作. (2认同)