如何正确使用 >=?(a+f()+c)>=0 错了吗?

How can I use >= correctly? Is (a+f()+c)>=0 wrong?

本文关键字:gt 错了 a+f 何正确      更新时间:2023-10-16
int he = 1;
vector<vector<int>> matrix { { 1, 5, 9 }, { 10, 11, 13 }, { 12, 13, 15 } };
bool bo=(he - matrix.size() + 1) >= 0;

我认为bo是假的,但这是真的。 我不知道为什么。左值有错吗?

matrix.size()

是无符号类型,因此整个表达式将提升为无符号。比较是unsigned(1 - 3U + 1) >= 0,或者unsigned(-3) >= 0,这总是正确的。(对于 32 位整数,unsigned(-3)类似于0xFFFFFFFD

您可以将其强制转换为预期类型

bool bo = int(he - matrix.size() + 1) >= 0;

尽管如果size返回的类型(unsigned long(大于int,这可能会生成编译器警告(如果是这种情况,请更改强制转换中使用的类型(。

matrix.size()的类型size_t是无符号的。
因此he - matrix.size() + 1,它应该具有值-1从算术的角度来看,实际上有一个非常 高正值(由于包裹低于零(。
这就是为什么比较在这里显示意外结果的原因。