根据以下规则,表达式中的操作数是否被提升为更大的类型?

flo*_*ode 6 c# operators implicit-conversion

如果数值表达式包含不同数字类型的操作数(常量和变量),则根据以下规则将操作数提升为更大的类型:

  1. 如果操作数的类型byte,sbyte,char,short,ushort,他们得到转换成int键入
  2. 如果其中一个操作数是int,那么所有操作数都将转换为int
  3. 如果表达还包含的类型的操作数uintint,那么所有的操作数转换为long
  4. 如果其中一个操作数是long,那么所有操作数都将转换为long
  5. 如果表达式包含类型的操作数ulonglong,然后操作数转换为float
  6. 如果其中一个操作数是float,那么所有操作数都将转换为float
  7. 如果其中一个操作数是double,则所有操作数都转换为double

假设数值表达式包含不同类型的操作数,所有操作数首先会转换为单个数字类型,然后运行时才会尝试计算结果吗?例如,如果变量b1b2是的byte类型,而i1int类型,将b1和b2 get转换为int计算之前(b1+b2):

int i2=(b1+b2)+i1
Run Code Online (Sandbox Code Playgroud)

Ken*_*art 1

括号的优先级高于+,因此转换通常发生在添加b1和后b2。但是,该+运算符没有s的重载byte,因此byte必须首先将 s 提升为ints。

进一步阅读: