学如逆水行舟,不进则退
心似平原跑马,易放难收
3.2 编译器支持的常见 C++变量类型
C++支持的类型
3.2.1 使用 bool 变量存储布尔值
C++提供了一种专为存储布尔值 true 和 false 而创建的类型, 其中 true 和 false 都是保留的 C++关键字。
例如:bool alwaysOnTop = false;
3.2.2 使用 char 变量存储字符
char 变量用于存储单个字符,下面是一个声明示例: char userInput = 'Y'; // initialized char to 'Y'
3.2.3 有符号整数和无符号整数的概念
符号表示正或负。
符 号 位 必 须 是 最 高 有 效 位 ( most-sigificant-bit , MSB ), 因 为 最 低 有 效 位( least-significant-bit)需要用于表示小于 2 的数字。当 MSB 包含符号信息时,假定 0 表示正, 1 表示负,而其他位包含绝对值。
3.2.4 有符号整型 short、 int、 long 和 long long
应根据变量可能存储的最大值给它指定合适的类型。
声明有符号类型的变量很简单,如下所示:
short int gradesInMath = -5; // not your best score
int moneyInBank = -70000; // overdraft
long populationChange = -85000; // reducing population
long long countryGDPChange = -70000000000;
3.2.5 无符号整型 unsigned short、 unsigned int、 unsigned long 和unsigned long long
不同于相应的有符号类型,无符号整型变量不能包含符号信息,因此,它们的最大取值为相应有符号类型的两倍。
声明无符号类型变量也很简单,如下所示:
unsigned short int numColorsInRainbow = 7;
unsigned int numEggsInBasket = 24; // will always be positive
unsigned long numCarsInNewYork = 700000;
unsigned long long countryMedicareExpense = 70000000000;
如果预期变量的取值不会为负数,就应将其类型声明为无符号的。
3.2.6 选择正确的数据类型以免发生溢出错误
要选择合适的数值类型,否则会发生溢出的情况,例如:
#include <iostream>
using namespace std;
int main()
{
unsigned short uShortValue = 65535;
cout << "Incrementing unsigned short " << uShortValue << " gives: ";
cout << ++uShortValue << endl;
short signedShort = 32767;
cout << "Incrementing signed short " << signedShort << " gives: ";
cout << ++signedShort << endl;
return 0;
}
运行结果如下:
从上面代码可以看出,无意的溢出导致应用程序的行为不可预测。
3.2.7 浮点类型 float 和 double
您可能在学校学过,浮点数就是实数,可以是正,也可以是负,还可以包含小数值。因此,如果要使用 C++变量存储 pi( 22/7)的值,就应将其声明为浮点类型。
要声明一个可存储小数值的float 变量,可像下面这样做: float pi = 3.14;
要声明双精度浮点数( double)变量,可像下面这样做: double morePrecisePi = 22.0 / 7;
C++14 新增了用单引号表示的组块分隔符( chunking separator)。使用这种分隔符可提高代码的可读性,如下面的初始化语句所示 :
int moneyInBank = -70'000; // -70000
long populationChange = -85'000; // -85000
long long countryGDPChange = -70'000'000'000; // -70 billion
double pi = 3.141'592'653'59; // 3.14159265359
GDPChange = -70'000'000'000; // -70 billion
double pi = 3.141'592'653'59; // 3.14159265359