首页 > 后端开发 > C++ > 为什么在 C 中比较有符号整数和无符号整数时 -1 比较为大于 0?

为什么在 C 中比较有符号整数和无符号整数时 -1 比较为大于 0?

Barbara Streisand
发布: 2024-12-11 02:04:14
原创
840 人浏览过

Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C  ?

理解负有符号整数与无符号整数的比较

在提供的 C 程序中,比较 b 时观察到输出“Greater”是令人困惑的(-1) 与 a.size() (0) 尽管 -1 在算术上小于 0。出现这种意外行为从有符号和无符号整数类型之间的根本区别来看。

在这种情况下,a.size() 返回一个无符号整数,表示向量的大小。相比之下,b 是有符号整数。比较这两个值时,有符号 b 会自动提升为无符号类型。此提升将 -1 转换为大于 0 的大无符号值。

此行为不限于向量大小。以下代码片段演示了同样的问题:

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

执行时,此代码输出“false”,表示在无符号类型的上下文中 -1 被视为大于 0。

为了避免这种混乱,重要的是要记住有符号和无符号整数具有不同的行为,并且在没有仔细考虑预期操作的情况下不应混合使用。

以上是为什么在 C 中比较有符号整数和无符号整数时 -1 比较为大于 0?的详细内容。更多信息请关注PHP中文网其他相关文章!

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