首页 >后端开发 >C++ >为什么在 C 中比较负整数与无符号整数会产生意外结果?

为什么在 C 中比较负整数与无符号整数会产生意外结果?

Linda Hamilton
Linda Hamilton原创
2024-12-08 04:34:10623浏览

Why Does Comparing a Negative Integer to an Unsigned Integer in C   Yield Unexpected Results?

负比较与正无符号整数?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn