【发布时间】:2017-09-06 21:09:04
【问题描述】:
我写了以下代码:
#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 最大值 - 2,然后您将 5 添加到此,使其变为正 3
-
无符号整数以明确定义的方式溢出(与有符号整数不同)。相关问题:stackoverflow.com/questions/16056758/…、stackoverflow.com/questions/9193880/overflowing-of-unsigned-int
标签: c++ integer-overflow unsigned-integer