请看看这个简单的程序:C++矢量大小。为什么-1大于零
#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.所以发生了什么?任何人都可以解释吗?
-1无符号大于0的无符号由于高位因为它是负面的。 – 2013-04-27 08:42:42
@JesusRamos - 或者更抽象地说,因为语言定义说不符合无符号类型范围的值被模2^n减少,其中n是用于表示无符号类型的位数。对于补码表示来说,这是目前最常见的积分类型表示,事实上,这是因为高位被设置。但其他表示也是允许的。 – 2013-04-27 11:02:58