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++并不保证符号整型超越限制(上溢和下溢)时不出错,而这正是当前实现中最为常见的行为。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值