首頁 > 後端開發 > C++ > C 提升規則如何處理有符號和無符號整數的二元運算?

C 提升規則如何處理有符號和無符號整數的二元運算?

Linda Hamilton
發布: 2024-11-29 14:24:10
原創
547 人瀏覽過

How Do C   Promotion Rules Handle Binary Operations with Signed and Unsigned Integers?

處理有符號和無符號整數的運算符的提升規則

當處理涉及操作數之間不同符號的二元運算符時,中概述的提升規則C 標準開始發揮作用。這些規則決定了運算的結果類型以及操作數的轉換方式。

具體來說,「通常的算術轉換」適用於此處(第 5/9 節)。這些轉換依降序排列:

  1. 長雙精確度(如果存在)
  2. 雙精確度
  3. 浮點數
  4. 積分促銷(轉換短/整數) /long long 到int/long/long long)
  5. 無符號長整型(如果存在)
  6. 如果long int 可以表示所有unsigned int 值,則為Long,否則為unsigned long int
  7. Long(如果存在)
  8. Unsigned(如果存在)

將這些規則應用於兩種場景呈現:

場景1:

int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
登入後複製
  • max是signed int,1個是signed int,1個是signed unsigned int
  • 發生積分提升,導致max as int
  • 由於 unsigned int 排名較高,因此結果類型為unsigned int
  • 結果: unsigned 溢到 2147483648

>場景2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;
登入後複製
  • us 是unsigned int, neg已簽署int
  • 發生整數提升,導致我們為unsigned int,neg為int
  • 由於unsigned int排名較高,所以結果型別為unsigned int
  • 但是值我們的負數 (-1) 無法用 int
  • 表示結果:實現定義的行為,可能回傳-1 或取決於平台

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

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