C#通常的算术转换 - 算术运算的结果/操作数类型?

时间:2018-03-13 02:52:43

标签: c# .net type-conversion arithmetic-expressions

在C#中,对数字类型的算术运算可能会导致值与任一操作数的类型不同。以下面的代码段为例:

byte x = 10;
byte y = 20;
var z = x + y;

此处z为int

我的问题是:

  1. 管理类型转换的确切规则是什么?我无法在C#(或一般的.NET)上找到资源。但是,似乎规则与C / C ++中的规则相同,因此本页面上的规则适用:https://docs.microsoft.com/en-us/cpp/c-language/usual-arithmetic-conversions
  2. 哪些运营商受到影响,并且其中任何运营商都有特殊规定?在我看来,+, - ,*,/,%,&,|,^,<<,>>至少与byte个操作数的行为方式相同。然而,反编译的源代码(使用ILSpy完成)显示了差异:仅为分割和余数添加了两个操作数的显式int强制转换,并且第二个变换参数被强制转换为int(但后者是明确指出in the docs;没有其他int施放在任何地方。
  3. 我是否正确理解结果将使用转换后的操作数计算,即可能存在隐式类型转换,即使反编译代码不明显? (关注implicit numeric conversions。)那么,如果我们的var z = (short)(x + y);行等同于var z1 = (short)((int)x + (int)y);?这似乎是因为如果xy都是255,则结果short将为510(即超出byte的范围。)
  4. 我希望以编程方式确定(当给出原始操作数类型和运算符时)转换的操作数和结果类型将是什么。 This question触及了这一点,但并没有阐明规则。

    提前致谢!

0 个答案:

没有答案