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。
我写了下面的代码:
#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。