C++ primer 学习之路 (2)3.1.4无符号类型

3.1.4 无符号类型

如果short表示的范围为−32768到+32767,则无符号版本的表示范围为0-65535

仅当数值不会为负时才应使用无符号类型,如人口、粒数等。要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可。

unsigned short change;

注意,unsigned本身是unsigned int的缩写。

程序演示了如何使用无符号类型,并说明了程序试图超越整型的限制时将产生的后果。

#include<iostream>
#include<climits>
using namespace std;
#define ZERO 0
int main()
{
 short sam = SHRT_MAX;
 unsigned short sue = sam;
 cout << "Sam has " << sam << " dollers and Sue has " << sue;
 cout << " dollers deposited." << endl
         << "Add $1 to each account." << endl << "Now";
 sam = sam + 1;
 sue = sue + 1;
 cout<< "Sam has " << sam << " dollers and Sue has " << sue;
 cout << " dollers deposited.\nPOOR Sam" << endl;
 sam = ZERO;
 sue = ZERO;
 cout << "Sam has " << sam << " dollers and Sue has " << sue;
 cout << " dollers deposited." << endl;
 cout << "Take $1 from each account." << endl << "Now";
 sam = sam - 1;
 sue = sue - 1;
 cout << "Sam has " << sam << " dollers and Sue has " << sue;
 system("pause");
 return 0;
}

该程序将一个short变量(sam)和一个unsigned short变量(sue)分别设置为最大的short值,在我们的系统上,是32767。然后,将这些变量的值都加1。这对于sue来说没有什么问题,因为新值仍比无符号整数的最大值小得多;但sam的值从32767变成了−32768!同样,对于sam,将其设置为0并减去1,也不会有问题;但对于无符号变量sue,将其设置为0并减去后,它变成了65535。可以看出,这些整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。C++确保了无符号类型的这种行为;但C++并不保证符号整型超越限制(上溢和下溢)时不出错,而这正是当前实现中最为常见的行为。



猜你喜欢

转载自blog.csdn.net/zhangfengfanglzb/article/details/80492863
今日推荐