C# 短整数演算: =
と =
C# は、short
整数を追加するときに一見矛盾した動作を示します。 直接代入 (short = short short
) はコンパイルに失敗しますが、複合代入 (short = short
) は成功します。この記事では、この動作について説明します。
short short
の結果が int
2 つの 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
があることに注意してください。
要約
2 つの short
値を加算すると、オーバーフローを避けるために int
が生成されます。 =
演算子の暗黙的なキャストにより、操作中の潜在的なオーバーフローによるデータ損失のリスクを軽減しますが、排除するわけではありませんが、簡潔なコードが可能になります。 これにより柔軟性が提供され、コンパイル エラーが発生する計算が可能になります。
以上がC# では「short = short」は許可されるのに、「short = short short」は許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。