首頁 >後端開發 >C++ >為什麼 C# 允許 `short = Short` 但不允許 `short = Short Short`?

為什麼 C# 允許 `short = Short` 但不允許 `short = Short Short`?

DDD
DDD原創
2025-01-23 08:42:16651瀏覽

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

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,其中 abshort,編譯器有效地將其轉換為:

<code class="language-csharp">a = (short)(a + b);</code>

此隱式轉換透過將 int 結果截斷回 short 來處理潛在的溢位。 請注意,如果總和超過 範圍,此截斷可能short導致資料遺失。

總結

兩個 short 值相加會產生一個 int 以避免溢位。 = 運算子的隱式轉換允許簡潔的程式碼,同時減輕(但不能消除)由於操作期間潛在溢出而導致資料遺失的風險。 這提供了靈活性,可以進行否則會導致編譯錯誤的計算。

以上是為什麼 C# 允許 `short = Short` 但不允許 `short = Short Short`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn