理解负有符号整数与无符号整数的比较
在提供的 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中文网其他相关文章!