C++ 中的无符号整数

Unsigned integer in C++

我写了下面的代码:

 #include <iostream>
using namespace std;
int main() {

   unsigned int i=1;
   i=i-3;
   cout<<i;
   return 0;
}

输出的是垃圾值,可以理解
现在我写了下面的代码:

    #include <iostream>
    using namespace std;
    int main() {

    unsigned int i=1;
    i=i-3;
    i=i+5;
    cout<<i;
    return 0;
}

现在输出是 3。这是怎么回事?这里的垃圾值是怎么加5的?

想想 unsigned int 的值被绘制在一个大钟面上,最大可能值 (UINT_MAX) 接近于零。

从 1 中减去 3 会使你在时钟上向后移动 3 个位置(这会得到 UINT_MAX - 1),并且将 5 添加到此会使你向前移动 5 个位置。

最终效果是 2 加 1,但重要的是要知道 中间值 值由 C++ 标准定义得非常好。它不是垃圾,而是与UINT_MAX在您的平台上的价值有关。

请注意,此溢出的明确定义性质不适用于 signed 类型。 signed 类型溢出的行为在 C++ 中是 undefined