[英]c++ vector size. why -1 is greater than zero
請看一下這個簡單的程序:
#include <iostream>
#include <vector>
using namespace std;
int main() {
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";
return 0;
}
我對它輸出“更大”的事實感到困惑,盡管 -1 顯然小於 0。我知道size
方法返回無符號值,但比較仍然適用於 -1 和 0。那么發生了什么? 誰能解釋一下?
因為向量的大小是無符號整數類型。 您正在將無符號類型與有符號類型進行比較,並且將二進制補碼負有符號整數提升為無符號類型。 這對應於一個大的無符號值。
此代碼示例顯示了您所看到的相同行為:
#include <iostream>
int main()
{
std::cout << std::boolalpha;
unsigned int a = 0;
int b = -1;
std::cout << (b < a) << "\n";
}
輸出:
錯誤的
vector::size()
的簽名是:
size_type size() const noexcept;
size_type
是無符號整數類型。 當比較一個無符號和一個有符號整數時,有符號整數被提升為無符號整數。 這里, -1
是負數,所以它會翻轉,有效地產生size_type
類型的最大可表示值。 因此它將比較為大於零。
-1 unsigned 是比零更高的值,因為高位設置為表示它是負數,但無符號比較使用此位來擴展可表示數字的范圍,因此它不再用作符號位。 比較以(unsigned int)-1 < 0
,這是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.