首頁 > 後端開發 > C++ > C 如何處理具有不同符號的二元運算子提升?

C 如何處理具有不同符號的二元運算子提升?

Mary-Kate Olsen
發布: 2024-12-02 08:00:13
原創
922 人瀏覽過

How Does C   Handle Binary Operator Promotion with Differing Signedness?

符號不同時的二元運算子提升

當二元運算子對不同符號的運算元運算時,C標準提供了確定提升的具體準則規則和結果類型。

標準第 5/9 節概述了「常用算術適用於此類運算符的轉換」。這些轉換遵循分層順序:

  1. 如果任一運算元為 long double,則兩個運算元都會轉換為 long double。
  2. 如果任一運算元為 double,則兩個運算元都會轉換為 double。
  3. 如果任一操作數為浮點型,則兩個操作數都轉換為浮點型。
  4. 積分提升為對兩個運算元都執行。
  5. 如果任一運算元為 unsigned long,則兩個運算元都轉換為 unsigned long。
  6. 如果一個運算元為 long int,另一個運算元為 unsigned int,則決定 long int 是否可以表示 unsigned int 的所有值。如果是,則將 unsigned int 轉換為 long int;否則,將兩個運算元都轉換為 unsigned long int。
  7. 如果任一運算元為 long,則兩個運算元都會轉換為 long。
  8. 如果任一運算元為 unsigned,則兩個運算元都會轉換為 unsigned。
  9. 否則,兩個操作數都保持類型int.

將這些規則應用於提供的程式碼範例:

範例1:

unsigned int one = 1;
int max = std::numeric_limits<int>::max();
unsigned int result = max + one;
登入後複製

因為unsigned int 優先於int 在規則第 5步驟中,所有運算元都轉換為 unsigned int。因此,結果的型別為 unsigned int。

範例 2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;
登入後複製

在這種情況下,規則規定兩個運算元都應轉換為 unsigned int。但是,結果值 (-1) 不能用 unsigned int 表示。因此,表達式的結果類型是根據 §4.7/3 實現定義的。

以上是C 如何處理具有不同符號的二元運算子提升?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板