在 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中文網其他相關文章!