C# 程序:
short a, b;
a = 10;
b = 10;
a = a + b; // Error : Cannot implicitly convert type 'int' to 'short'.
// we can also write this code by using Arithmetic Assignment Operator as given below
a += b; // But this is running successfully, why?
Console.Write(a);
这里有两个问题。第一个是“为什么short加short结果是int?”
好吧,假设短加短是短,看看会发生什么:
short[] prices = { 10000, 15000, 11000 };
short average = (prices[0] + prices[1] + prices[2]) / 3;
当然,如果在短裤中进行此计算,则平均值为 -9845。总和大于可能的最大短路值,因此它会转为负数,然后除以负数。
在整数算术环绕的世界中,在 int 中进行所有计算更为明智,这种类型可能有足够的范围来保证典型计算不会溢出。
第二个问题是:
- 短加短就是 int
- 将 int 分配给 Short 是非法的
- a +=b 与 a = a + b 相同
- 因此短+=短应该是非法的
- 那么为什么这是合法的呢?
该问题的前提不正确;上面第三行是错误的。 C# 规范在第 7.17.2 节中说明
否则,如果所选运算符是
预定义的运算符,如果返回
所选运算符的类型是
显式转换为类型
x,并且如果 y 是隐式可转换的
x 的类型或运算符是 a
移位运算符,则运算为
计算为 x = (T)(x op y),其中 T
是 x 的类型,除了 x 是
仅评价一次。
编译器代表您插入强制转换。正确的推理是:
- 短加短就是 int
- 将 int 分配给 Short 是非法的
- s1 += s2 与 s1 = (short)(s1 + s2) 相同
- 因此这应该是合法的
如果它没有为您插入强制转换,那么就不可能在许多类型上使用复合赋值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)