ホームページ > バックエンド開発 > C++ > C# では「short = short」が機能するのに、「short = short short」は機能しないのはなぜですか?

C# では「short = short」が機能するのに、「short = short short」は機能しないのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-23 08:52:10
オリジナル
986 人が閲覧しました

Why Does `short  = short` Work in C# While `short = short   short` Doesn't?

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>
ログイン後にコピー

ここで、ab の加算演算結果は int 型であり、コンパイラーはそれを暗黙的に short 型に変換できません。これは、明示的な変換を行わずに intshort に代入するとデータ損失が発生するためです。

ただし、次のコードではエラーは発生しません:

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート