C++中的无符号整数

Unsigned integer in C++

本文关键字:无符号整数 C++      更新时间:2023-10-16

我编写以下代码:

 #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++中未定义