根据有关有符号和无符号整数类型之间隐式转换的规则(在此处和处讨论),当将一个 unsigned int
与一个 int
相加时,有符号的 int
首先被转换为 unsigned int
。
例如,请考虑以下最小化程序:
#include <iostream>
int main()
{
unsigned int n = 2;
int x = -1;
std::cout << n + x << std::endl;
return 0;
}
程序的输出仍然是1,正如预期的那样:x
首先被转换为unsigned int
,与n
相加导致整数溢出,得出了“正确”的答案。
在像上面代码这样的情况下,如果我确定n + x
是正数,那么我可以假设unsigned int n
和int x
的总和会给出预期的值吗?
std::int8/16/32_t
保证采用二进制补码,因此它们始终有效。 - Galik