《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 类型提供的精度通常 没有必要,而且还需要承担额外的运行代价。 

page55image8216 page55image8640

类型

含义

最小存储空间

page55image13904 page55image14496 page55image14816 page55image15240 page55image15664

bool

page55image16912 page55image17504 page55image17664 page55image18088 page55image18512

boolean

NA


char

page55image27704

character

8 bits

类型                              含义

page56image2648  page56image4000

最小存储空间

wchar_t                  wide character

page56image7984 page56image8144 page56image8736 page56image9160 page56image9584

16 bits

short                     short integer

page56image13928 page56image14088 page56image14680 page56image15104 page56image15528

16 bits

int                            integer

page56image19832 page56image19992 page56image20584 page56image21008 page56image21432

16 bits

long                      long integer

page56image25776 page56image25936 page56image26528 page56image26952 page56image27376

32 bits

float             single-precision floating-point

page56image31720 page56image31880 page56image32472 page56image32896 page56image33320
6 significant digits

double          double-precision floating-point

page56image38944 page56image39104 page56image39696 page56image40120 page56image40544
10 significant digits

page56image42400 page56image42560 page56image43152 page56image43576 page56image44000

long double       extended-precision floating-point

page56image47456
10 significant digits

你可能感兴趣的:(基本数据类型)