【发布时间】:2015-03-24 14:38:24
【问题描述】:
我刚刚开始自学 C++,并且已经开始学习整数溢出。出于好奇,我写了一些测试来看看某些整数值会发生什么。
这是我的程序:
#include <iostream>
int main()
{
int x(0);
std::cout << x << std::endl;
x = x + 2147483647;
std::cout << x << std::endl;
x = x + 1;
std::cout << x << std::endl;
std::cout << std::endl;
unsigned int y(0);
std::cout << y << std::endl;
y = y + 4294967295;
std::cout << y << std::endl;
y = y + 1;
std::cout << y << std::endl;
}
这是输出:
0
2147483647
-2147483648
0
4294967295
0
输出结果让我有点吃惊,我想知道是否有人可以解释为什么会发生这种情况,或者这些结果的意外性是否可以预料;所以这可能只是我的特定机器的结果。
【问题讨论】:
-
这件事有什么让你吃惊的地方吗?你期待什么?
-
我的期望是有符号和无符号的反应相似,它们都将变为 0。在阅读了 2 的赞美和 legends2k 的评论之后,它变得更有意义了。就带符号的 int 而言,我想我没想到最左边的位代表负号。
-
如果它可以进一步提供帮助:这个 limits.h 为您提供每种本机类型的最大值和最小值的常量:cplusplus.com/reference/climits
标签: c++ integer-overflow