C++ Primer 5th - 2.1 基础内建类型

C++所定义的内建类型包括算数类型和特殊的void类型。算数类型包括字符,整数,布尔和浮点数。void类型与值无关而且void类型的应用场景也比较少,一般也就用作函数的返回值类型。

2.1.1 算数类型

算数类型可以分为两大类:整型(包括字符和布尔)和浮点型。类型的大小意味着一个该类型变量在内存中所占用的字节数量。这些类型的标准的最小大小如表2-1所示,但是编译器可以使用更大字节数来决定它们的大小。这是因为类型所覆盖的最大最小值是可变的。

C++ Primer 5th - 2.1 基础内建类型_第1张图片

因为需要支持国际化所以会在表中看到有好几种字符类型。最基本的字符类型是char,一个char的大小取决于是否能够涵盖字符集。所以char的大小为一个字节。

剩下的字符型有wchar_t,char16_t和char32_t——这些都用于扩展字符集。wchar_t类型可以保证足够大的在机器最大的扩展字符集中保持任何字符。char16_t和char32_t用于Unicode字符集。

C++规定int的大小最小为short的大小,long的大小最小为int的大小,long long的大小最小为long的大小。

浮点型分为单精度,双精度和扩展精度。这个标准制定了类型的最小的有效位。大多数编译器会提供比最小有效位更高的精度。比如float通常为一个字(32位),double通常为两个字(64位),long double通常为3到4个字(96位或128位)。float和double分别指定了7位和16位有效位。

除了bool和扩展的char类型,整形还分为signed和unsigned。signed类型表示正数或负数(包括0),unsigned类型表示正数或0。

int,short,long,long long都是signed类型的。如果我们想要得到对应的unsigned类型,在它们前加上unsigned即可,如unsigned int。

与整数型不同,还有3个基础类型分别为char,signed char,unsigned char。事实上char和signed char不同,虽然字符类型有3中类型,但只有两种表达方式,signed和unsigned。char只用其中一种表示方式,至于是哪种,取决于编译器。

unsigned的类型的所有位都代表数值,比如,一个8位的unsigned char 可以保存0-255的范围的值。

2.1.2 类型转换

一个类型的一个对象的的数据包含了应该包含什么数据以及所支持的操作。在这些操作中,大多数类型都支持的一个操作就是类型转换。

    bool b = 42; // b is true
    int i = b; // i has value 1
    i = 3.14; // i has value 3
    double pi = i; // pi has value 3.0
    unsigned char c = -1; // assuming 8-bit chars, c has value 255
    signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined

根据类型许可的取值范围以上语句都发生了什么事情呢:
1.当我们将一个非bool的算数类型赋值给一个bool变量时的结果为若值为0则为false,否则为true。
2.将一个bool变量赋值给一个算数类型的变量,赋值的结果为:当bool为false时结果为0,true时结果为1。
3.将一个浮点型变量赋值给一个整形变量时结果将会被截断。
4.将一个整形变量赋值给一个浮点型变量时小数点后面都是0。
5.如果将一个超出范围的值赋值给一个unsigned变量,那么结果是剩下的值mod这个类型的最大范围。例如:一个unsigned char可以表示0-255的值,当我们用一个超出该范围的值赋值给它时,编译器会将剩余的数mod256。因此-1赋值给unsigned char时该变量的值为255。
6.如果将一个超出范围的值赋值给一个signed变量,那么结果将是未定义的。

你可能感兴趣的:(C++,Primer,5th,C++-Primer)