首页 > 后端开发 > C++ > 为什么在 C 中将 -1 与空向量的大小进行比较会导致'更大”?

为什么在 C 中将 -1 与空向量的大小进行比较会导致'更大”?

Mary-Kate Olsen
发布: 2024-12-07 22:42:14
原创
783 人浏览过

Why Does Comparing -1 to an Empty Vector's Size Result in

为什么将 -1 与向量的大小 0 进行比较会得到“更大”

谜题

在 C 中,以下代码片段会生成意外的输出"Greater":

#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";
}
登录后复制

输出:

vector size 0
Greater
登录后复制

揭开谜团

这种违反直觉的行为背后的原因在于所比较的值之间的类型差异。 a.size() 返回一个无符号整数,表示向量的非负大小。另一方面,b 是一个有符号整数,持有负值 -1。

比较这两个值时,C 执行隐式提升为无符号。结果,b 被提升为一个大的无符号整数,然后与无符号的 a.size() 进行比较。大的无符号值超过 0,导致“更大”输出。

一个澄清示例

可以通过以下代码进一步说明此行为:

#include <iostream>

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

输出:

false
登录后复制

这里,我们直接将无符号类型 (a) 与有符号类型进行比较(b).负值 b 被提升为一个大的无符号整数,它被正确地认为大于值为 0 的无符号 a。

结论

理解类型差异和隐式提升规则是对于在 C 中处理有符号和无符号值至关重要。在比较不同类型的整数时,重要的是要考虑它们的提升方式以及结果比较是否有意义。

以上是为什么在 C 中将 -1 与空向量的大小进行比较会导致'更大”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板