提升規則如何管理具有混合符號類型的二元運算符算術
考慮以下代碼:
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
運算子計算結果為2147483648,建議使用unsigned int傳回型別。相反,在以下程式碼中:
unsigned int us = 42; int neg = -43; int result = us + neg;
result 為 -1,表示 int 回傳型別。
促銷規則解析
C標準定義了算術二元運算子(C §5/9):
的意義範例
在這兩個範例中,提升規則都會產生無符號型別
範例1: max 和1 都提升為unsigned int,導致回傳類型為unsigned int。
例 2: 提升法則並沒有規定 int 和 unsigned int 之間明顯的勝者。但是,選擇了無符號類型,導致結果無符號溢位。由於結果最終分配給 int,因此根據 C §4.7/3,結果值是未定義的。
以上是C 提升規則如何決定混合有符號和無符號整數類型的二元算術運算子的回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!