《C++ Primer Plus 第六版 中文版》的研读与学习(十二)

本文深入探讨C++中整型数据的特性,包括short和unsigned short类型的取值范围及溢出行为。通过具体代码示例,展示了宏定义的使用,以及变量上溢和下溢的现象,解释了无符号类型unsigned的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往期传送门:
《C++ Primer Plus 第六版 中文版》的研读与学习(十一)
《C++ Primer Plus 第六版 中文版》精选习题解析(一)
《C++ Primer Plus 第六版 中文版》的研读与学习(十)
《C++ Primer Plus 第六版 中文版》的研读与学习(九)
《C++ Primer Plus 第六版 中文版》的研读与学习(八)
《C++ Primer Plus 第六版 中文版》的研读与学习(七)
《C++ Primer Plus 第六版 中文版》的研读与学习(六)
《C++ Primer Plus 第六版 中文版》的研读与学习(五)
《C++ Primer Plus 第六版 中文版》的研读与学习(四)
《C++ Primer Plus 第六版 中文版》的研读与学习(三)
《C++ Primer Plus 第六版 中文版》的研读与学习(二)
《C++ Primer Plus 第六版 中文版》的研读与学习(一)

好久没有更新了,今天我们继续学习《C++ Primer Plus》

在上期内容中,我们讲了C++中整数数据的一些内容,今天,我们接着来谈谈整数型数据的有关知识。

我们先来看看这一段程序:

#include <iostream>
#include <climits> 

#define ZERO 0                 // 宏定义,使ZERO代表0值

using namespace std;
int main()
{
	short sam = SHRT_MAX;      // 初始化变量到最大值
	unsigned short sue = sam;  // 若变量sam已定义,即可如此

	cout << "Sam has " << sam << " dollars and Sue has " << sue << " dollars deposited." << endl;
	cout << "Add $1 to each account." << endl;
	sam = sam + 1;
	sue = sue + 1;
	cout << "Now Sam has " << sam << " dollars and Sue has " << sue << " dollars deposited.\nPoor Sam!" << endl;
	sam = ZERO;
	sue = ZERO;
	cout << "Take $1 to each account." << endl;
	sam = sam - 1;
	sue = sue - 1;
	cout << "Now Sam has " << sam <<" dollars and Sue has " << sue << " dollars deposited." << endl << "Lucky Sue!" << endl;
	return 0;
}

程序的运行结果:

Sam has 32767 dollars and Sue has 32767 dollars deposited.
Add $1 to each account.
Now Sam has -32768 dollars and Sue has 32768 dollars deposited.
Poor Sam!
Take $1 to each account.
Now Sam has -1 dollars and Sue has 65535 dollars deposited.
Lucky Sue!

首先,我们来看看这一条语句:

#define ZERO 0

在C++中,#define#include一样,都是预处理器编译指令。语法:

#define macro-name replacement-string

该命令用于把指定的字符串替换文件中的宏名称 . 也就是说,#define使编译器把文件中每一个macro-name替换为replacement-string. 替换的字符串结束于行末;另外一个功能是替换参数,使它假冒创建函数一样使用。注意:当使用复杂的宏时,最好使用额外的圆括号。
宏定义的命令与变量的初始化不同,宏定义之后不可修改。

接下来我们看这个程序主函数的内容。
程序定义了一个short类型变量samunsigned short类型变量sue,并对它们赋予short类型的最大值32767,然后使两个变量分别加1。
我们发现,改变后的sue值符合数学运算的结果,但是sam却得到了-32768的值;同样,当samsue设置为0再减1后,sam的值符合数学运算的结果,但是sue却得到了65535的值。
究其原因,我们可以了解到,short类型变量的取值范围是[-32768,32767];unsigned short类型变量的取值范围是[0,65535]。这也就是无符号类型变量unsigned与常规变量的区别。

通过设置无符号类型unsigned的变量,我们可以避免C++发生上溢或下溢的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值