编译时的隐式转换

时间:2018-10-18 09:43:33

标签: c# .net

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

enter image description here

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

enter image description here

您介意向我解释那里正在发生什么过程以及它如何在后台运行吗?

1 个答案:

答案 0 :(得分:5)

文字整数是常数,它将永不变。因此,如果隐式转换是安全的,则编译器可以在编译时推断出它们。

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

当转换为非恒定值时,不能说相同; 变量。编译器无法知道i的值是什么,因此隐式转换是不安全的,也是不允许的。

关于为什么这种行为会出现浮点数和双精度的现象(请参见注释):原因是在语言中存在 个浮点文字,因此,如果要使用浮点文字,请使用浮点文字。没有字节或简短的文字,因此编译器可以帮助您

此外,将有效的int装入byte意味着没有数据/精度损失;这些位是相同的,您只是在高端截断了0位。将double转换为float时不能说同样的话。将任何给定数字表示为单精度或双精度浮点数是根本不同的,并且固有地会损失精度。两种语言之间的语言设计决策不同是有理由的,因为它们在总体上是不同的。