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

C# では「short = short」は許可されるのに、「short = short short」は許可されないのはなぜですか?

DDD
リリース: 2025-01-23 08:42:16
オリジナル
652 人が閲覧しました

Why Does C# Allow `short  = short` But Not `short = short   short`?

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 (abshort) の場合、コンパイラーはこれを次のように効果的に変換します。

<code class="language-csharp">a = (short)(a + b);</code>
ログイン後にコピー

この暗黙的なキャストは、int の結果を切り詰めて short に戻すことで、潜在的なオーバーフローを処理します。 合計が 範囲を超える場合、この切り捨てによりデータ損失が発生する可能性shortがあることに注意してください。

要約

2 つの short 値を加算すると、オーバーフローを避けるために int が生成されます。 = 演算子の暗黙的なキャストにより、操作中の潜在的なオーバーフローによるデータ損失のリスクを軽減しますが、排除するわけではありませんが、簡潔なコードが可能になります。 これにより柔軟性が提供され、コンパイル エラーが発生する計算が可能になります。

以上がC# では「short = short」は許可されるのに、「short = short short」は許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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