C# 短整数算术:理解 =
与 =
C# 在添加 short
整数时表现出看似矛盾的行为。 直接赋值 (short = short short
) 编译失败,而复合赋值 (short = short
) 编译成功。本文澄清了这种行为。
为什么 short short
结果是 int
两个 short
整数之和隐式提升为 int
。这种设计选择可以防止潜在的溢出错误。 当算术运算的结果超过数据类型可表示的最大值时,就会发生溢出。
考虑这个例子:
<code class="language-csharp">short[] prices = { 10000, 15000, 11000 }; short average = (prices[0] + prices[1] + prices[2]) / 3; // Compile-time error</code>
如果没有隐式提升到 int
,加法就会溢出,导致 average
不准确。
=
运算符的隐式转换
=
运算符与直接赋值不同。 C# 语言规范规定复合赋值运算符对左侧操作数的类型执行隐式转换。
对于 a = b
,其中 a
和 b
是 short
,编译器有效地将其转换为:
<code class="language-csharp">a = (short)(a + b);</code>
此隐式转换通过将 int
结果截断回 short
来处理潜在的溢出。 请注意,如果总和超过 范围,此截断可能short
导致数据丢失。
总结
两个 short
值相加会产生一个 int
以避免溢出。 =
运算符的隐式转换允许简洁的代码,同时减轻(但不能消除)由于操作期间潜在溢出而导致数据丢失的风险。 这提供了灵活性,可以进行否则会导致编译错误的计算。
以上是为什么 C# 允许 `short = Short` 但不允许 `short = Short Short`?的详细内容。更多信息请关注PHP中文网其他相关文章!