![C++从零开始学(视频教学版)(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/128/29977128/b_29977128.jpg)
3.2 基本变量类型
前面讲了变量的基本定义以及如何操作。本节将介绍C++中常用的几个基本的变量类型如何使用。
提示
变量是存放在内存中的,程序根据内存地址来访问变量。
3.2.1 整数类型
在现实生活中,整数是大家常用的描述方式,在C++中则用整型来描述整数。整型规定了整数的表示形式、运算和表示范围。
在C++中,整型数据类型是用关键字int声明的常量或变量,其值只能为整数。根据unsigned、singed、short和long等修饰符,整型数据类型可分为4种,分别对应无符号整型、有符号整型、短整型和长整型。在C++中,整型变量的声明方式如下:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P58_6819.jpg?sign=1738917484-QTWAI1KHgxQtGJiSJwHOrBcXZCa0bQ2f-0-9b335f011acff5404215c156a7670979)
每种整型变量都有不同的表示方式,表3-1说明了每种整型变量的取值范围。
表3-1 整形变量的取值范围
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-T58_6979.jpg?sign=1738917484-uL2P257xarGB2jN1DmdmfuV0u7SRUf4F-0-3c0c59194656bb0b85aef20b41374d5f)
下面通过一个实例来说明int类型的使用方法。
【实例3-5】int类型的用法(代码3-5.txt)
新建名为“inttest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P58_6982.jpg?sign=1738917484-Tw3wqW02Y7cJ22Ct1Qoau4PjvYNRM7Sl-0-7dbd615edc1ff1f8fc0397bc2902db3a)
【代码详解】
在该例的主程序中,首先定义了一个整型变量a,给该变量赋值100。接下来,输出该变量的值和该变量所占内存空间的大小。下面定义了short int型变量b,对该变量赋值100.01,然后输出该变量的值和该变量占用的内存大小。
运行结果如图3-5所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P59_7084.jpg?sign=1738917484-RdIgr3hL53AIAGQYBsv0MmOzZshzFzNc-0-b6a9a71bfe7f7688efbf192af09cb14f)
图3-5 代码运行结果图
【实例分析】
从整个示例来看,使用int实现了定义整型变量的操作,使用short int实现了定义短整型变量的操作。整型变量与短整型变量的区别在于它们的取值范围不同。
提示
整型数据在溢出后不会报错,达到最大值后又从最小值开始记。在编程时,注意定义变量的最大取值范围,一定不要超过这个取值范围。
3.2.2 字符类型
在C++中,字符型数据类型只占据1字节,其声明关键字为char。同样,可以给其加上unsigned、singed修饰符,分别表示无符号字符型和有符号字符型。在C++中,字符型变量的声明方式如下:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P59_7122.jpg?sign=1738917484-2oA1TQFI7RavZUSQ3owwH2PGi3VBEYfA-0-80ed2e2fff015144f19690f21b73226a)
在ASCII中,共有127个字符。其中1~31和127为不可见字符,其余全部为可见字符。
提示
字符是为针对处理ASCII码字符而设的,字符在表示方式和处理方式上与整数吻合,在表示范围上是整数的子集,其运算可以参与到整数中去,只要不超过整数的取值范围。
计算机不能直接存储字符,所以所有字符都是用数字编码来表示和处理的。例如,a的ASCII码值是97,A的ASCII码值是65,等等。如果一个字符被当作整数使用,其值就是对应的ASCII码值;如果一个整数被当作字符使用,该字符就是这个整数在ASCII码表中对应的字符。
通常在C++中,单个字符使用单引号表示。
例如,字符a可以写为'a'。
单引号只能表示一个字符,如果字符的个数大于1,就变成了字符串,只能使用双引号来表示了。
在C++中,还有一些比较特殊的字符,这些字符是以转义符("\")开头的,称为转义字符。表3-2列出了转义字符。
表3-2 转义字符
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-T60_7431.jpg?sign=1738917484-fA3hkYh9F5soIOHG95teoO7nBOkF2wVu-0-2bd1ba1d234127e5b181f62222c9869d)
下面通过一个实例来说明字符的使用方法。
【实例3-6】字符类型(代码3-6.txt)
新建名为“chartest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P60_7436.jpg?sign=1738917484-5HrIIyj0Wj1FlCxtKauQM36LdnY03hhi-0-5afac5349a62bea0c0f7a666d11867e8)
【代码详解】
在本例中,首先定义了一个char型变量cch,其后给cch赋值为'A',将字符变量cch输出。再定义一个int型变量ich,给它赋值也是'A',然后将该变量输出。运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P61_7484.jpg?sign=1738917484-bkFZ2NyTEjkKDxWNZdP29dt7ohbbIAVC-0-a113fadaa9ad02ca3f3e4970fd936c0f)
图3-6 代码运行结果图
【实例分析】
从结果来看,定义了字符型数据cch和整型数据ich,给它们赋值都为字符'A',输出后其结果不同,整型变量ich的输出为65。这是因为字符型数据在计算机内部是转换为整型数据来操作的,如上述代码中的字母A,系统会自动将其转换为对应的ASCII码值65。
3.2.3 浮点数类型
浮点数类型表示的是带有小数点的数据。在C++中,浮点数类型分为以下3种。
提示
浮点数内部表示特殊,操作不同于整数,能够表示的大小范围比同样大小的整数空间大很多,在两个连续的整数之间能够表示很多精细的数值。
(1)单精度浮点型(float):专指占用32位存储空间的单精度值。当用户需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。下面是一个声明单精度浮点型变量的例子。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P61_7520.jpg?sign=1738917484-YsJn7QT56bPYi6hEXsE0so3C8rlRW15Y-0-a780d273eb35212b8e5cc097512f4567)
(2)双精度浮点型(double):占用64位的存储空间。当用户需要保持多次反复迭代的计算的精确性时,或在操作值很大的数据时,双精度型是最好的选择。例如,前面计算圆周长,声明的常量和变量均为双精度型,代码如下:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P61_7527.jpg?sign=1738917484-VQcQlgxoMHhoVaVElWMlYsNCGiWaBNcK-0-9d034356609ec0b1b3eeac82ca2d94d9)
(3)扩展精度浮点型(long double):占用80、96或者128位存储空间。
“精度”是指尾数中的位数。通常float类型提供7位精度,double类型提供15位精度,long double类型提供19位精度,但double类型和long double类型在几个编译器上的精度是相同的。除了精度有所增加之外,double类型和long double类型的取值范围也在扩大。
表3-3说明了浮点数的取值范围。
表3-3 浮点数的取值范围
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-T62_7744.jpg?sign=1738917484-dFjBOXsTHZUxBitygztFsl4XlXsvutt8-0-7bd57193cd5c906eeb1009a7dd6c21b7)
显然,这些类型都可以表示0,但不能表示0和正负范围中下限之间的值,所以这些下限是非0值中最小的值。
下面通过一个实例来说明浮点数的应用。
【实例3-7】浮点数应用(代码3-7.txt)
新建名为“floattest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P62_7747.jpg?sign=1738917484-hMteFbGxxviyW0FCpjybl0srmuwMQBBT-0-d87219f19a1d9c3150764aab989841cc)
【代码详解】
在该例中,首先定义了一个float类型的变量a,又定义了一个double类型的变量b。给a和b赋值为3.1415926,将a和b先输出,再调用setprecision函数保留9位小数输出b。
运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P62_7738.jpg?sign=1738917484-gizco9Cvk2S4rUw1umpw44wefdc2am9a-0-e438a104283763a2d10629ad9d19044c)
图3-7 代码运行结果
【实例分析】
从运行结果来看,无论定义的变量为单精度数据类型float还是双精度数据类型double,其输出的小数位都相同,这是因为没有设置输出精度,系统默认输出6位小数(包括小数点)。若需要double型变量输出更多的小数位,则应设置精度。
3.2.4 布尔类型
布尔类型在C++中表示真假,用bool表示,其直接常量只有两个:true和false,分别表示逻辑真和逻辑假。同样,如果要把一个整型变量转换成布尔型变量,其对应关系为:若整型值为0,则其布尔型值为假(false);若整型值为1,则其布尔型值为真(true)。
提示
bool型输出形式可以选择,默认为整数1和0,若要输出true和false,则可以使用输出控制符d。
下面通过一个实例来说明布尔类型的使用。
【实例3-8】布尔应用(代码3-8.txt)
新建名为“booltest”的【C++ Source File】源程序,源代码如下所示:
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P63_7896.jpg?sign=1738917484-YYOelLzHDeipwHHUX2rEqqLOAp1B7f80-0-402dc9aa8be611be1a0563f81ec8f318)
【代码详解】
在该例中,首先定义了一个bool类型的变量bflag,又定义了一个int型的变量iflag。给bflag和iflag都赋值为true,将iflag和bflag输出。
运行结果如图3-8所示。
![](https://epubservercos.yuewen.com/A8BCBE/16499866604816706/epubprivate/OEBPS/Images/Figure-P63_7890.jpg?sign=1738917484-fUuZauXTGFW1IPjtKFO2Ocv4quuzpLR2-0-8a934f24114273140a1a9c147f67be0a)
图3-8 代码运行结果
【实例分析】
从运行结果来看,上述程序定义了布尔型变量bflag和整型变量iflag,给其赋值后输出。可以看到,其输出并不是true,而都是整数值1,这是使用布尔类型数据时需要注意的。