C++语言的基本数据类型有如下四种:
·整型,说明符为int; ·字符型,说明符为char; ·浮点型(又称实型),说明符为float(单精度),double(双精度); ·空值型,说明符为void,用于函数和指针。 为了满足各种情况的需要,除了void型外,上述的三种类型前面还可以加上修饰符改变原来的含义。 signed 表示有符号 unsigned 表示无符号 long 表示长型 short 表示短型 上述4种修饰符都适用于整型和字符型,只有long 还适用于双精度浮点型。
在C++中,数据具有不同的类型,类型定义了变量可存储的数值范围以及可进行的操作变量是用于内存中保存数据的,每个变量都必须有确定的数据类型,C++语言的数据类型如图2-1所示。
在图2-1中,把数据类型划分为基本的数据类型和复合的数据类型,我们也可把数据类型分为内置的类型和用户定义的类型两大类,用户定义的类型在使用以前,必须先定义,包括:结构、类、枚举和联合类型;内置的类型是指直接被C++提供的类型,也就是说,是除用户定义的类型以外的其它类型。
图2-1 C++数据类型
从语法上来说,void类型也是基本的类型,但是,它不是一个完整的类型,只能作为更复杂类型的一部分。没有void类型的变量,它或者用于指定一个函数(在第五章介绍)没有返回值,或者作为指针(在第七章介绍)类型,表示该指针指向未知类型的变量,例如:
void x; //错误,没有void变量
void f( ); //函数f不返回值
void *pv; //指针pv指向未知类型的变量
布尔型、字符型、整型和浮点型也称为算术类型;枚举、指针、数组、引用、结构、联合和类称之为复合数据类型,它们能通过其它数据类型进行构造。
在基本的数据类型char、 int前可以添加修饰符,以改变基本类型的意义,可用的修饰符有long、short、signed和unsigned四种,另外,双精度型前可以加long修饰符。基本的数据类型及其表示范围,可参见表2-3。
表2-3 基本的数据类型及其表示范围
unsigned和signed只用于修饰char和int,且signed修饰词可以省略。当用unsigned修饰词时,后面的类型说明符可以省略。例如:
signed int n; //与"int n;"等价
signed char ch; //与"char ch;"等价
unsigned int n; //与"unsigned n;"等价
unsigned char ch; //与"unsigned ch;"等价
short只用于修饰int,且用short修饰时,int可以省略,即:
short int n; //与"short n;"等价
long只能修饰int和double。当用long修饰int时,int可以省略,即:
long int n; //与"long n;"等价
int和unsigned int类型占用一个机器一个字(word)的字节。在16位操作系统上,它们占用2个字节;在32位操作系统上,它们占用4个字节
各种数据类型精度由低到高排列如图2-2
图2-2
如果一个双目运算符两边的操作数类型不同,先要将它们转换为相同的类型,即较低类型转换为较高类型,然后再参加运算。所谓类型的高低,跟所占的存储空间大小有直接关系,所占存储空间越大的类型,级别越高。
图中横向的箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转换成double型再进行运算,结果亦为double型。纵向箭头表示当运算符两边的操作数为不同类型时的转换,如一个long型数据与一个int型数据一起运算,需要先将int型数据转换为long型,然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的,使用时只需了解结果的类型即可。
程序2-2
#include <iostream.h>
void main(void)
{
char a = 'x';
int b = 3,f = 2;
float c = 2.5678;
double d = 5.2345
long e = 32L;
cout<<a - b + d / c - e * f<<endl;
}
下面我们来分析一下这段程序:
(1) 进行d / c运算时,要将c转换成double型,运算的中间结果为double型;
(2) 进行e * f运算时,将f转换为long型,运算的中间结果为long型;
(3) 进行a - b运算时,将a转换为int型(数值为ASCⅡ码值120),运算的中间结果为int型;
(4) 当(3)的中间结果与(1)的中间结果运算时,将(3)的中间结果转换为double型,运算的中间结果为double型;
(5) 当(4)的中间结果与(2)的中间结果运算时,将(2)的中间结果转换为double型,得出最后结果。
于是,程序最后的运行结果为55.038515