我了解到,当对有符号和无符号整数执行算术时,有符号整数将提升为无符号整数。
基于此,我无法解释其行为:
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/