c++ - 有符号-无符号加法行为异常

标签 c++

我了解到,当对有符号和无符号整数执行算术时,有符号整数将提升为无符号整数。

基于此,我无法解释其行为:

unsigned int u = 1000;
signed int i = -1;

std::cout << i + u << std::endl;

当我运行此代码时,我得到 999。我预计我会被转换为无符号,将 -1 值转换为 4294967295。

最佳答案

事实上确实如此。有符号-1实际上转换为无符号4294967295。但是无符号1000 + 无符号4294967295是4294968295,即超出范围的位被截断后的999。在二进制补码表示中添加(或减去)有符号数有这种有趣的行为,如果您在“有符号”或“无符号”模式下进行加法实际上并不重要(仅在溢出检测方面存在差异 - 这是无法通过C/C++)。

关于c++ - 有符号-无符号加法行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61929063/

相关文章:

c++ - 继承中的多个覆盖方法每个都有多种可能的实现

c++ - C++ 字符串的 tolower 函数

c++ - ifstream 找不到文件?

c++ - 我可以通过 C++ 中的原始偏移量手动访问字段吗?

c++ - 如何迭代 std::variant 的类型?

c++ - 使用带有 operator== 的 std::find 时出错

c++ - C++类方法定义语法

c++ - 为什么循环没有被矢量化?

c++ - 使用fprintf来存储流

c++ - 指向引用的指针和指向指针的引用之间的区别