典型的整形溢出行为

  C++中常用的数据类型有整形,字符型,浮点型(单精度和双精度)等等。其中基本整形(按长度递增的顺序排列)分别是 char、short、int和long,其中每种类型都有符号版本和无符号版本,因此总共有8种类型可供选择。但是char类型常用来表示字符,而不是数字。

在C++中short、int、long它们的长度:

  short至少16位(8位=1个字节);

  int至少与short一样长;

  long至少32位,且至少与int一样长。

介绍了一些基本知识,现在来说说溢出吧:

看下面这段代码

#include 
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)

                          典型的整形溢出行为_第1张图片

上面这幅图表示出了有符号和无符号short类型的的溢出情况:

当是有符号整数时,其最大值为+32767,再+1之后就会溢出为-32768;当为无符号整数时就无影响,继续+1为32768。

你可能感兴趣的:(C++学习笔记)