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

  • 如果操作数的类型为bytesbytecharshortushort,则将它们转换为int类型
  • 如果操作数之一是int,则所有操作数都将转换为int
  • 如果表达式还包含uintint类型的操作数,则所有操作数都将转换为long
  • 如果操作数之一是long,则所有操作数都将转换为long
  • 如果表达式包含ulonglong类型的操作数,则将操作数转换为float
  • 如果操作数之一是float,则所有操作数都将转换为float
  • 如果操作数之一是double,则所有操作数都将转换为double


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

    最佳答案

    括号的优先级高于+,因此转换通常在添加了b1b2之后进行。但是,+byte运算符does not have an overload,因此必须首先将byte提升为int

    进一步阅读:

  • operator precedence
  • binary numeric promotion
  • 关于c# - 表达式中的操作数是否根据以下规则提升为更大的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3080597/

    10-11 23:18