《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++的基本操作,接下来我们就详细讲一讲C++中变量相关的内容。
在C++中,变量的存在大致有如下几个目的:
- 明确信息储存的位置
- 明确存储的值(value)
- 明确存储信息的类型
在《C++ Primer Plus 第六版 中文版》的研读与学习(五)中,我们提到了C++中变量的几种基本类型,本节我们首先来介绍整数在C++中的表示。
位数(bit) | 字节数(byte) | 最小值 | 最大值 | ||
---|---|---|---|---|---|
int | 整型 | 32 | 4 | -32768 | 32767 |
short int | 短整型 | 16 | 2 | -2147483648 | 2147483647 |
long | 长整型 | 32 | 4 | -2147483648 | 2147483647 |
long long | 双长整型 | 64 | 8 | -9223372036854775808 | 9223372036854775807 |
这里简单介绍一下计算机原理的一些内容。众所周知,计算机以二进制储存数据,也就是说,我们无论以哪一种语言(高级语言和汇编语言),在计算机内都要转化为0-1编码(机器语言)才能够被计算机理解并执行。上表中的“位”(bit)就表示一位二进制数,有0、1两种可能的情况。那么,8bit就有2的8次幂即256种可能的值,也就是可以表示-128至127之间的整数,这样,我们称8bit为1byte(字节B)。
为了更好地理解整型变量在C++中的应用,我们来看这样的一段程序:
#include <iostream>
#include <climits> // 旧版本中使用limits.h
using namespace std;
int main()
{
int n_int = INT_MAX; // 初始化n_int使之为整型数据的最大值
short n_short = SHRT_MAX; // 在climits文件中定义的量
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
// 变量类型声明符对应的类型或变量的大小
cout << "int is " << sizeof(int) << " bytes." << endl;
cout << "int is " << sizeof n_short << " bytes." << endl;
cout << "int is " << sizeof(long) << " bytes." << endl;
cout << "int is " << sizeof n_llong << " bytes." << endl;
cout << endl;
cout << "Maximum values:" << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl;
cout << "long long: " << n_llong << endl;
cout << "Minimum int value = " << INT_MIN << endl;
cout << "Bits per byte = " << CHAR_BIT << endl;
return 0;
}
该程序的运行结果如下:
int is 4 bytes.
int is 2 bytes.
int is 4 bytes.
int is 8 bytes.
Maximum values:
int: 2147483647
short: 32767
long: 2147483647
long long: 9223372036854775807
Minimum int value = -2147483648
Bits per byte = 8
有必要注意的是,long long
型变量为C++11新增的数据类型,部分编译器可能不支持,如遇这种情况,请删除相关的代码语句。
上述程序中,使用了我们之前没有接触到的函数sizeof()
,该函数的语法如下:
sizeof(operator);
sizeof varible;
当参数为变量类型声明符(operator)时,需要外带圆括号,返回该类型变量的长度(字节数);当参数为变量时,圆括号可有可无,返回该变量的长度(字节数)。
在上述程序中,使用到了<climits>
头文件(老式版本中为<limits.h>
),其中包含了关于整型数据的极限的有关信息。例如,其中定义了INT_MAX
为int型数据的最大取值,CHAR_BIT
为一个字符所占的位数(即字节与位的换算关系)等。<climits>
头文件中的符号常量如下表所示:
符号常量 | 含义 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MAX | char的最大值 |
CHAR_MIN | char的最小值 |
SCHAR_MAX | signed char的最大值 |
SCHAR_MIN | signed char的最小值 |
UCHAR_MAX | unsigned char的最大值 |
SHRT_MAX | short的最大值 |
SHRT_MIN | short的最小值 |
USHRT_MAX | unsigned short的最大值 |
INT_MAX | |
INT_MIN | int的最小值 |
UINT_MAX | unsigned int的最大值 |
LONG_MAX | long的最大值 |
LONG_MIN | long的最小值 |
ULONG_MAX | unsigned long的最大值 |
LLONG_MAX | long long的最大值 |
LLONG_MIN | long long的最小值 |
ULLONG_MAX | unsigned long long的最大值 |
为了达到这样的目的,<climits>
头文件中使用了如下的宏定义的预处理器命令:
#define INT_MAX 32767
有关宏定义的预处理器命令,我们在以后的文章中会讲到。
变量的初始化过程中,可以将变量的声明与赋值合并或分开,即如下的两种写法都是正确的:
int n_int = INT_MAX;
int n_int;
n_int = INT_MAX;
如果对同一个变量进行多次赋值,则之后的赋值会覆盖之前的赋值:
int a = 5;
a = 10;
cout << a << endl;
// 该算法运行后输出结果为 10
当然,我们也可以利用std::cin
对变量赋予键盘输入的值。
另外,C++11中提供了对变量进行赋值的特殊方式,即将被赋值的量放在花括号内:
int a = { 3};
如此以来,以后进行强制类型转换的操作中,可以避免许多错误。在本书中,明确提出了在支持C++11的编译器中可以省略=
,但是笔者只用CFree5编译器,省略等号却出现了bug。
文章的最后,我们谈一谈C++变量的命名规范。
首先,必须遵守的规则有:
- 在名称中只能出现字母、数字和下划线_,不允许出现其他任何字符。
- 名称的第一个字符不能是数字
- 大写字母与小写字母区分
- 以两个下划线开头的名称保留给实现(编译器及其资源)使用,以一个下划线开头的名称保留给实现用作全局变量。
- 一般的编译器对名称长度没有限制。
一般地,我们对变量的命名本着便于阅读程序的原则进行,因此,应该避免使用原有函数名或变量名进行命名;变量的名称也应该尽可能体现变量的含义,如my_carrots
、myCarrots
等。
还没有评论,来说两句吧...