《C++ Primer》笔记-C++ 基本数据类型
《C++ Primer》中列出的基本数据类型,其中wchar_t是以前没见过的:
字符类型有两种:char 和 wchar_t。char 类型保证了有足够的空间,能够 存储机器基本字符集中任何字符相应的数值,因此,char 类型通常是单个机器 字节(byte)。wchar_t 类型用于扩展字符集,比如汉字和日语,这些字符集中 的一些字符不能用单个 char 表示。
对象的类型决定对象的取值。这会引起一个疑问:当我们试着把一个超出其 取值范围的值赋给一个指定类型的对象时,结果会怎样呢?答案取决于这种类型 是 signed 还是 unsigned 的。
对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会 将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的 unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围
58
的值,那么编译器将会取该值对 256 求模后的值。例如,如果试图将 336 存储 到 8 位的 unsigned char 中,则实际赋值为 80,因为 80 是 336 对 256 求 模后的值。
对于 unsigned 类型来说,负数总是超出其取值范围。unsigned 类型的对 象可能永远不会保存负数。有些语言中将负数赋给 unsigned 类型是非法的,但 在 C++ 中这是合法的。
C++ 中,把负值赋给 unsigned 对象是完全合法的,其结果是 该负数对该类型的取值个数求模后的值。所以,如果把 -1 赋 给 8 位的 unsigned char,那么结果是 255,因为 255 是 -1 对 256 求模后的值。
当将超过取值范围的值赋给 signed 类型时,由编译器决定实际赋的值。在 实际操作中,很多的编译器处理 signed 类型的方式和 unsigned 类型类似。也 就是说,赋值时是取该值对该类型取值数目求模后的值。然而我们不能保证编译 器都会这样处理 signed 类型。
浮点型 :
对于实际的程序来说,float 类型精度通常是不够的——float 型只能 保证 6 位有效数字,而 double 型至少可以保证 10 位有效数字,能 满足大多数计算的需要。
决定使用哪种浮点型就容易多了:使用 double 类型基本上不会有错。 在 float 类型中隐式的精度损失是不能忽视的,而 double 类型精度代 价相对于 float 类型精度代价可以忽略。事实上,有些机器上,double 类型比 float 类型的计算要快得多。long double 类型提供的精度通常 没有必要,而且还需要承担额外的运行代价。
类型 |
含义 |
最小存储空间 |
bool |
boolean |
NA |
char |
character |
8 bits |
类型 含义 |
最小存储空间 |
wchar_t wide character |
16 bits |
short short integer |
16 bits |
int integer |
16 bits |
long long integer |
32 bits |
float single-precision floating-point |
6 significant digits
|
double double-precision floating-point |
10 significant digits
|
long double extended-precision floating-point |
10 significant digits
|