首頁 >後端開發 >C++ >為什麼在 C 比較有符號整數和無符號整數時 -1 比較為大於 0?

為什麼在 C 比較有符號整數和無符號整數時 -1 比較為大於 0?

Barbara Streisand
Barbara Streisand原創
2024-12-11 02:04:14839瀏覽

Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C  ?

理解負有符號整數與無符號整數的比較

在提供的C 程式中,比較b 時觀察到輸出「Greater 」是令人困惑的(-1) 與a.size() (0) 儘管-1 在算術上小於0。出現這種意外行為從有符號和無符號整數類型之間的根本區別來看。

在這種情況下,a.size() 傳回一個無符號整數,表示向量的大小。相比之下,b 是有符號整數。比較這兩個值時,有符號 b 會自動提升為無符號類型。此提升將 -1 轉換為大於 0 的大無符號值。

此行為不限於向量大小。以下程式碼片段示範了相同的問題:

#include <iostream>
int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n"; 
}

執行時,此程式碼輸出“false”,表示在無符號類型的上下文中 -1 被視為大於 0。

為了避免這種混淆,重要的是要記住有符號和無符號整數具有不同的行為,並且在沒有仔細考慮預期操作的情況下不應混合使用。

以上是為什麼在 C 比較有符號整數和無符號整數時 -1 比較為大於 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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