C# 算術演算: バイト加算における暗黙的な型変換を理解する
C# では、2 つの byte
値を追加すると、予期せず int
の結果が生成されます。これは、算術演算中の言語の暗黙的な型変換規則に起因します。 その理由を探ってみましょう。
主な理由は、
オペランドに対して直接の byte
演算子が定義されていないことです。 コンパイラーは、加算を実行する前に、両方の byte
オペランドを int
に暗黙的に変換します。 これにより、潜在的なオーバーフロー エラーが防止されます。
次の例を考えてみましょう:
<code class="language-csharp">byte x = 1; byte y = 2; byte z = x + y; // Compile-time error: Cannot implicitly convert type 'int' to 'byte'</code>
コンパイラの内部処理は基本的に次のとおりです。
<code class="language-csharp">int xInt = (int)x; int yInt = (int)y; int zInt = xInt + yInt;</code>
合計 zInt
は int
(32 ビット) であり、明示的なキャストなしで byte
(8 ビット) に直接割り当てることはできないため、エラーが発生します。 これを修正するには、結果を明示的にキャストします:
<code class="language-csharp">byte z = (byte)(x + y); // Explicit cast to byte</code>
この int
への暗黙的な変換により、オーバーフローが防止されます。 byte
値の範囲は 0 ~ 255 です。2 つの byte
値を追加すると、この範囲を超える可能性があります。 int
に昇格することで、コンパイラーは結果がより大きな整数の容量内に収まるようにします。
一見直観に反しているように見えますが (なぜ byte byte = byte
ではないのでしょうか?)、この動作はエラー防止を優先した設計上の選択です。 暗黙的な変換を理解することは、堅牢で予測可能な C# コードを作成するために重要です。
以上がC# で Byte Byte = Int になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。