C# の整数オーバーフローおよび算術代入演算子: short = short
C# では、2 つの short
整数を加算すると、結果は int
よりも広い範囲の値を持つ short
型になります。整数オーバーフローは、2 つの short
整数の合計が short
の最大値を超える場合に発生します。
次のコードを考えてみましょう:
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。</code>
ここで、a
と b
の加算演算結果は int
型であり、コンパイラーはそれを暗黙的に short
型に変換できません。これは、明示的な変換を行わずに int
を short
に代入するとデータ損失が発生するためです。
ただし、次のコードではエラーは発生しません:
<code class="language-csharp">a += b; // 但这段代码可以成功运行,为什么?</code>
これは、C# が 算術代入演算子 =
を異なる方法で処理するためです。 =
を使用すると、コンパイラーは内部で次のことを行います:
<code class="language-csharp">a = (short)(a + b);</code>
コンパイラは、加算演算の結果を a
に代入する前に、自動的に short
型に変換します。これにより、中間結果の型が int
であっても、値が short
変数に正しく格納されるようになります。
この動作は、結果を左側のオペランドの型に自動的に変換する、-=
、*=
、/=
などの他の複合代入演算子と似ています。
したがって、算術代入演算子 short
は、合計が =
の範囲を超える場合でも、short
変数で安全に使用できます。コンパイラは、整数オーバーフロー エラーを回避するために内部で型変換を処理します。
以上がC# では「short = short」が機能するのに、「short = short short」は機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。