版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nliki/article/details/89018181
假设我们有两个变量s_v(short)和us_v(unsigned short)分别设置为最大的short值,将两个变量值都加1,看下会出现什么结果; 然后将两个变量s_v(short)和us_v(unsigned short)分别设置为最小的short值,将两个变量值都减1,看下会出现什么结果。
#include "iostream";
#define ZERO 0;
int main()
{
//典型的整型溢出行为 Nliki
using namespace std;
cout << "将变量值 s_v和us_v 设置成最大的short值" << endl;
short s_v = SHRT_MAX;
unsigned short us_v = SHRT_MAX;
cout << "s_v = " << s_v << endl;
cout << "us_v = " << us_v << endl;
cout << "将变量值 s_v和us_v 都加1 结果" << endl;
s_v += 1;
us_v += 1;
cout << "s_v = " << s_v << endl;
cout << "us_v = " << us_v << endl;
cout << "-----------------------------------------" << us_v << endl;
cout << "将变量值 s_v和us_v 设置成最小的short值" << endl;
s_v = ZERO;
us_v = ZERO;
cout << "s_v = " << s_v << endl;
cout << "us_v = " << us_v << endl;
cout << "将变量值 s_v和us_v 都减1 结果" << endl;
s_v -= 1;
us_v -= 1;
cout << "s_v = " << s_v << endl;
cout << "us_v = " << us_v << endl;
return 0;
}
输出结果:
将变量值 s_v和us_v 设置成最大的short值
s_v = 32767
us_v = 32767
将变量值 s_v和us_v 都加1 结果
s_v = -32768
us_v = 32768
-----------------------------------------32768
将变量值 s_v和us_v 设置成最小的short值
s_v = 0
us_v = 0
将变量值 s_v和us_v 都减1 结果
s_v = -1
us_v = 65535
示意图
以上可以看出,这些整型符号的行为就像一个圆,如果超越了限制,其值将为范围另一端的值。