C ++矢量大小。 为什么-1大于零(c++ vector size. why -1 is gr

2019-09-01 06:06发布

请看看这个简单的程序:

#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。所以这是怎么回事? 任何人都可以解释一下吗?

Answer 1:

因为矢量的大小是一个无符号的整数类型。 你是一个签一个比较无符号的类型,两个互补负号的整数提升为无符号。 这相当于一个大的无符号值。

此代码示例说明你看到相同的行为:

#include <iostream>
int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n"; 
}

输出:



Answer 2:

用于签名vector::size()为:

size_type size() const noexcept;

size_type是一个无符号整数类型。 当比较无符号和符号整数,已签署的一个提升为无符号。 这里, -1为负所以它翻转,有效地得到了的最大可表示值size_type类型。 因此,它会比较如大于零。



Answer 3:

-1无符号大于零更高的价值,因为高的位设置为表明它是阴性,但无符号比较使用此位扩大表示数字的范围,它不再作为一个符号位。 该比较为已完成(unsigned int)-1 < 0其是假的。



文章来源: c++ vector size. why -1 is greater than zero