首頁 > 後端開發 > C++ > 為什麼在 C 中將 -1 與空向量的大小進行比較會導致「更大」?

為什麼在 C 中將 -1 與空向量的大小進行比較會導致「更大」?

Mary-Kate Olsen
發布: 2024-12-07 22:42:14
原創
784 人瀏覽過

Why Does Comparing -1 to an Empty Vector's Size Result in

為什麼將 -1 與向量的大小 0 進行比較會得到「更大」

謎題

在 C中,以下程式碼片段會產生意外的輸出"Greater":

#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";
}
登入後複製

輸出:

vector size 0
Greater
登入後複製

揭開謎團

這種違反直覺的行為背後的原因在於所比較的值之間的類型差異。 a.size() 傳回一個無符號整數,表示向量的非負大小。另一方面,b 是一個有符號整數,持有負值 -1。

比較這兩個值時,C 執行隱式提升為無符號。結果,b 被提升為一個大的無符號整數,然後與無符號的 a.size() 進行比較。大的無符號值超過 0,導致“更大”輸出。

一個澄清範例

可以透過以下程式碼進一步說明此行為:

#include <iostream>

int main()
{
    unsigned int a = 0;
    int b = -1;
    std::cout << std::boolalpha << (b < a) << "\n"; 
}
登入後複製

輸出:

false
登入後複製

這裡,我們直接將無下符號型別(a) 與有符號型別比較(b).負值 b被提升為一個大的無符號整數,它被正確地認為大於值為 0 的無符號 a。

結論

理解型別差異和隱式提升規則是對於在 C 中處理有符號和無符號值至關重要。在比較不同類型的整數時,重要的是要考慮它們的提升方式以及結果比較是否有意義。

以上是為什麼在 C 中將 -1 與空向量的大小進行比較會導致「更大」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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