簡體   English   中英

c ++ 矢量大小。 為什么 -1 大於零

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM