C++中常用的数据类型有整形,字符型,浮点型(单精度和双精度)等等。其中基本整形(按长度递增的顺序排列)分别是 char、short、int和long,其中每种类型都有符号版本和无符号版本,因此总共有8种类型可供选择。但是char类型常用来表示字符,而不是数字。
在C++中short、int、long它们的长度:
short至少16位(8位=1个字节);
int至少与short一样长;
long至少32位,且至少与int一样长。
介绍了一些基本知识,现在来说说溢出吧:
看下面这段代码
#include <iostream>
using namespace std;
int main()
{
short a = SHRT_MAX; //此处 SHRT_MAX表示有符号short数据类型的最大值
unsigned short b = a;
cout << "a = " << a << " b = " << b << endl;
a++;
b++;
cout << "a = " << a << " b = " << b << endl;
return 0;
}
输出结果为:
a = 32767 b = 32767
a = -32768 b = 32768
a和b都只进行了一次自加运算为什么得到的结果不同呢?
因为a是有符号的整形变量而b是无符号的整形变量而
一个short变量和一个unsigned short变量它们的长度都为16位,short变量的取值范范围是-32768~+32767(-2^15+1~2^15-1),而unsigned的取值范围是0~65535(0~2^16-1)
上面这幅图表示出了有符号和无符号short类型的的溢出情况:
当是有符号整数时,其最大值为+32767,再+1之后就会溢出为-32768;当为无符号整数时就无影响,继续+1为32768。