数据是程序处理的对象,数据可以依其本身的特点进行分类。我们知道在数学中有整数、实数的概念,在日常生活中需要用字符串来表示人的姓名和地址,有些问题的回答只能是“是”或“否”(即逻辑“真”或“假”)。不同类型的数据有不同的处理方法,例如:整数和实数可以参加算术运算,但实数的表示又不同于整数,要保留一定的小数位;字符串可以拼接;逻辑数据可以参加“与”、“或”、“非”等逻辑运算。
我们编写计算机程序,目的就是为了解决客观世界中的现实问题。所以,高级语言中也为我们提供了丰富的数据类型和运算。C++中的数据类型分为基本类型和自定义类型。基本类型是C++编译系统内置的。 C++的基本数据类型如下表所示(下表中列出的各类型的长度和取值范围,是指以面向80x86处理器的 Viusal C++ 2012 和 gcc 4.8.1 的长度,其它的编译器并不一定是这个长度)。
bool所支持的字节数是1b,取值范围是false、true;
char、signed char所支持的字节数是1b,取值范围是-128~127;
unsign char所支持的字节数是1b,取值范围是0~255;
short (signed short)所支持的字节数是2byte,取值范围是-32768~32767;
unsigned short所支持的字节数是2byte,取值范围是0~65535;
int (signed int)所支持的字节数是4b,取值范围是-2147483648~2147483647;
unsigned int所支持的字节数是4b,取值范围是0~4294967295;
long (signed long)所支持的字节数是4b,取值范围是-2147483648~2147483647
unsigned long所支持的字节数是4b,取值范围是0~4294967295
unsigned long long所支持的字节数是8b,取值范围是0~18446744073709551615
float所支持的字节数是4b,取值范围是
double所支持的字节数是8b,取值范围是
long double所支持的字节数是8b,取值范围是 C++丰富的数据类型允许根据需要选择不同的类型,这也使得计算机的操作更复杂。
自动类型转换(隐式类型转换)
在下列四种情况中计算机自动进行类型转换: 在混合类型的算术表达式中 intival=3; doubledval=3.1415 ival+dval;//ival被提升为double类型:3.0 用另外一种类型的表达式赋值 int*pi=NULL;//NULL(0)被转换成了int*类型的空指针值 用一个表达式传递给一个函数调用 externdoublesqrt(double); sqrt(2);//2被提升为double类型:2.0 从一个函数返回一个表达式 doubledifference(intival1,intival2) { returnival1-ival2;//返回值被提升为double类型. } 强制类型转换(显示类型转换)
C++显式转换包含四种转换: static_cast:
用法:static_cast < type-id > ( expression )
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 dynamic_cast :
用法:dynamic_cast < type-id > (expression)
说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*; const_cast:
用法:const_cast
说明:该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 reinterpret_cast :
用法:reinterpret_cast
说明:type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。