」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 普通算術轉換如何決定帶有符號和無符號運算元的二元「+」運算子的結果類型?

普通算術轉換如何決定帶有符號和無符號運算元的二元「+」運算子的結果類型?

發佈於2024-12-22
瀏覽:797

How Do Usual Arithmetic Conversions Determine the Result Type of Binary \

有符號和無符號二元運算子的提升規則

有符號和無符號二元運算子的提升規則
// Snippet 1
int max = std::numeric_limits::max();
unsigned int one = 1;
unsigned int result = max   one;
// Snippet 2
unsigned int us = 42;
int neg = -43;
int result = us   neg;

// 代碼片段 1 int max = std::numeric_limits::max(); 無符號整數一=1; unsigned int result = max one;

// 片段 2 無符號整數我們 = 42; 整數負=-43; int result = us neg;

    在這些情況下,考慮到運算元的不同符號,「 」運算子如何決定正確的結果型別?
  • 此運算子遵循「通常的算術轉換」規則,它根據操作數類型規定類型轉換步驟。根據此規則,如果任一操作數為:
  • long double,則兩個操作數都轉換為 long double。
  • double,兩個運算元都轉換為 double。
  • float,兩個操作數都轉換為 float。
  • unsigned long,另一個操作數轉換為unsigned long.
  • long int 和另一個操作數unsigned int,如果unsigned int 的值可以用long int 表示,則兩個操作數都轉換為unsigned long int;否則,兩者都轉換為long。
long,另一個操作數轉換為 long。

unsigned,另一個運算元轉換為 unsigned。

Since int 和 unsigned int 在規則中是可以互換的,選擇具有更寬型別(unsigned int)的運算元作為結果型別。 How Do Usual Arithmetic Conversions Determine the Result Type of Binary \

這解釋了為什麼代碼段 1 中,結果是 unsigned int (2147483648),而在代碼段 2 中,結果是 int (-1)。有符號運算元 (neg) 隱式轉換為無符號 int,在後一種情況下會產生未定義的值。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3