C++ Primer Plus P37 程序清单3.2
演示程序试图超越整型的限制时将产生的后果
/*
C++ Primer Plus P37 程序清单3.2
演示程序试图超越整型的限制时将产生的后果
*/
//头文件
#include<iostream>
#include<climits>
//宏区
/*const int ZERO = 0*/ //这是C++推荐的定义常变量(宏)的写法
#define ZERO 0 //#define预处理器是C语言带入C++的,C++推荐写法是使用常变量const。
//主函数
int main(void)
{
using namespace std; //编译指令
short sam = SHRT_MAX; //定义sam是最大值
unsigned short sue = sam; //定义无符号的短整型sue等于短整型sam的最大值
cout << "Sam has " << sam << " dollars and Sue has " << sue << " dollars deposited." << endl; //显示两种类型的值
cout << "Add $1 to each account." << endl; //对两个不同的数据类型的值进行+1的操作
sam = sam + 1;
sue = sue + 1;
/*解释下段代码:sam是短整型其最大值为SHRT_MAX,所以+1后会从最小值开始往后加1,而sue是无符号短整型,所以未到最大值,不然从正号的最小值0开始*/
cout << "Now Sam has " << sam << " dollars and Sue has " << sue << " dollars deposited." << endl; //显示两种类型的+1后的值
cout << "Poor Sam!" << endl;
sam = ZERO; //重置sam
sue = ZERO; //重置sue
cout << "Sam has " << sam << " dollars and Sue has" << sue << " dollars deposited." << endl; //显示两种类型重置后的值
cout << "Take $1 from each account." << endl; //对两个不同的数据类型的值进行-1的操作
sam = sam - 1;
sue = sue - 1;
/*解释下段代码:sam是短整型其最小值为SHRT_MIN,所以-1后会从0值开始往后-1,而sue是无符号短整型,不嫩有符号,所以自然-1后从最大值开始了*/
cout << "Now Sam has " << sam << " dollars and Sue gas " << sue << " dollars deposited." << endl;
cout << "Lucky Sue!" << endl;
return 0;
}
总结:本代码主要想告诉,无符号的数据类型在最小值0下,去-1会变成最大值。例如:0,1,2,3,如果0 去一直-1则3,2,1,0,3,2,1,0的循环,普通的整型一样,假设-1~2,如果-1去一直-1,则:-1,2,1,0,-1,2的循环,如果2去一直+1,则一样的道理。
这里需要注意,#define是C代入C++的,一般情况下C++使用常变量const去代替宏的使用
/*const int ZERO = 0*/ //这是C++推荐的定义常变量(宏)的写法
#define ZERO 0
感谢观看
再次感谢~