负比较与正无符号整数?
在 C 中,我们经常遇到比较不同类型值的情况。然而,理解这些比较的行为方式可能很棘手。
考虑以下代码:
#include <iostream> #include <vector> int main() { std::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"; }
即使“-1”明显小于“0”,代码也会打印“Greater”。 ”为什么会出现这种情况?
关键在于涉及的数据类型不同。 a.size() 返回一个无符号整数,而 b 是一个负符号整数。比较这两种类型时,负符号整数将提升为无符号整数。这会导致一个很大的无符号值与 0 进行比较,这显然更大。
为了进一步说明这一点,让我们看下面的示例:
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints "false" }
在这种情况下,结果是正如预期的那样,是“假”。这是因为 a 和 b 都被提升为无符号整数,而“-1”现在是一个大于 0 的大无符号值。
以上是为什么在 C 中比较负整数与无符号整数会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!