首页 >后端开发 >C++ >C 如何处理有符号整数和无符号整数之间的比较?

C 如何处理有符号整数和无符号整数之间的比较?

Linda Hamilton
Linda Hamilton原创
2024-12-07 00:16:11995浏览

How Does C   Handle Comparisons Between Signed and Unsigned Integers?

C 中有符号和无符号类型的比较

在 C 中,当将有符号整数与无符号整数进行比较时,有符号整数将提升为无符号整数。这意味着负号被忽略,整数被视为一个大的正值。

考虑以下 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";
}

在这个程序中,向量 a 的大小是一个无符号整数。但是,当将其与有符号整数 b 进行比较时,b 会被提升为无符号整数。这意味着负号被忽略,b 被视为一个大的正值。因此,比较b<0。 a.size() 将始终为 false,并且程序将打印“Greater”。

要更清楚地看到此行为,请考虑以下代码示例:

#include <iostream>

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

此程序将输出 false,即使 b 明显小于 a。这是因为 b 被提升为无符号整数,并且负号被忽略。

以上是C 如何处理有符号整数和无符号整数之间的比较?的详细内容。更多信息请关注PHP中文网其他相关文章!

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