C# 短整數算術:理解 =
與 =
C# 在加上 short
整數時表現出看似矛盾的行為。 直接賦值 (short = short short
) 編譯失敗,而複合賦值 (short = short
) 編譯成功。本文澄清了這種行為。
為什麼 short short
結果是 int
兩個 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
導致資料遺失。
總結
兩個 short
值相加會產生一個 int
以避免溢位。 =
運算子的隱式轉換允許簡潔的程式碼,同時減輕(但不能消除)由於操作期間潛在溢出而導致資料遺失的風險。 這提供了靈活性,可以進行否則會導致編譯錯誤的計算。
以上是為什麼 C# 允許 `short = Short` 但不允許 `short = Short Short`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!