c++内置类型

来源:互联网 发布:找不到wifi网络 编辑:程序博客网 时间:2024/05/15 20:13

C++定义了一组表示整数、浮点数、单个字符和布尔值的算术类型arithmetic types),另外还定义了一种称为void的特殊类型。void类型没有对应的值,仅用在有限的情况下。通常用作无返回值的函数的返回类型。
算术类型的存储空间依机器而定。类型存储空间是指用来表示该类型的位(bit)数。C++标准保证了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。事实上,对于int类型,几乎所有的编译器使用的存储空间都比所要求的大。下表列出了内置算术类型和其对应的最小存储空间。

1. 整形

表示整数字符布尔值的算术类型都看作整型

字符类型有两种:charwchar_tchar类型保证了有足够的空间存储机器基本字符集中任何字符相应的数值,因此,char类型通常是单个机器字节(byte)。wchar_t类型用于扩展字符集,比如汉字和日语,这些字符集中的一些字符不能用单个char表示。

short、int和long类型都表示整型值,但具有不同大小的存储空间。一般short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int类型和long类型通常字长是相同的)。

bool类型表示真值true和false。可以将算术类型的任何值赋给bool对象。0值算术类型代表false,任何非0的值都代表true。

1.1 带符号和无符号类型

除bool类型外,整型可以是带符号的(signed)也可以是无符号的(unsigned)。顾名思义,带符号类型可以表示正数也可以表示负数(包括0),而无符号型只能表示大于或等于0的数。

整型int、short和long都默认为带符号型。要获得无符号型则必须指定该类型为unsigned,比如unsigned long。unsigned int类型可以简写为unsigned,也就是说,unsigned后不加其他类型标识符意味着是unsigned int。
和其他整数类型不同,char有三种不同的类型:plain char、unsigned char和signed char。虽然char有三种不同的类型,但只有两种表示方式。可以使用unsigned char或signed char表示char类型。使用哪种char表示方式由编译器而定。

1.2 如何表示整数值

无符号型中,所有的位都表示数值。如果在特定的机器中,定义一种类型使用8位表示,那么这种类型的unsigned型可以取值0到255。

C++标准并未定义signed类型如何用位来表示,而是由每个编译器自由决定如何表示signed类型。这些表示方式会影响signed类型的取值范围。可以确保8 位的signed类型取值至少从-127到127,也有许多实现允许取值从-128到127。

最常见的表示signed整数类型的策略是用其中一个位作为符号位。符号位为1,值就为负数;符号位为0,值就为0或正数。一个signed整数取值是从-128到127。

1.3 对整型赋值

对象的类型决定对象的取值。这会引起一个疑问:当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时,结果会怎样呢?答案取决于这种类型是signed还是unsigned

对于unsigned类型来说,编译器必须调整越界值使其满足要求。编译器是通过取该值对unsigned类型可以取的不同值的数目求模后的值来实现的。比如8位的unsigned char,其取值范围从0255(包括255)。如果赋给超出这个范围的值,那么编译器将会取该值对256求模后的值。例如,我们可以试着将336赋值给8 位的signed char。如果试图将336存储到8位的unsigned char中,实际赋值为80,因为80336256求模后的值。

对于unsigned类型来说,负数总是超出其取值范围。unsigned类型的对象不可取负数,有些语言把负数赋给unsigned类型看成是非法的,但在C++中是合法的。
C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以,如果把-1赋给8位的unsigned char,那么结果是255,因为255-1256求模后的值。

当将超过取值范围的值赋给signed类型时,由编译器决定实际赋的值。在实际操作中,很多的编译器处理signed类型和处理unsigned类型类似。也就是说,赋值时是取该值对该类型的取值个数求模后的值。然而我们不能保证编译器都会这样处理signed类型。

2. 浮点型

类型floatdoublelong double分别表示单精度浮点数双精度浮点数扩展精度浮点数。一般float类型用一个字(32)来表示,double类型用两个字(64)来表示,long double类型用三个或四个字(96128)来表示。类型的取值范围决定了浮点数含有的有效数字位数。

 

   

   

最小存储空间

bool

布尔型

NA

char

字符型

8

wchar_t

宽字符型

16

short

短整型

16

int

整型

16

续表

   

   

最小存储空间

long

长整型

32

float

单精度浮点型

6位有效数

double

双精度浮点型

10位有效数

long double

扩展精度浮点型

10位有效数