首頁 >後端開發 >C++ >為什麼在 C 中比較負整數與無符號整數會產生意外結果?

為什麼在 C 中比較負整數與無符號整數會產生意外結果?

Linda Hamilton
Linda Hamilton原創
2024-12-08 04:34:10624瀏覽

Why Does Comparing a Negative Integer to an Unsigned Integer in C   Yield Unexpected Results?

負比較與正無符號整數?

在 C 中,我們經常遇到比較不同類型的值的情況。然而,理解這些比較的行為方式可能很棘手。

考慮以下程式碼:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> a;
    std::cout << "vector size " << a.size() << std::endl;

    int b = -1;
    if (b < a.size())
        std::cout << "Less";
    else
        std::cout << "Greater";
}

即使“-1”明顯小於“0”,程式碼也會列印“Greater”。 「為什麼會出現這種情況?

關鍵在於涉及的資料類型不同。a.size() 傳回一個無符號整數,而b 是一個負符號整數。比較這兩種類型時,負符號整數將提升為無符號整數。進行比較,這顯然更大。假」。這是因為a 和b 都被提升為無符號整數,而「-1」現在是大於0 的大無符號值。

以上是為什麼在 C 中比較負整數與無符號整數會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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