1.2 基本数据类型
C++是一种数据类型严格的语言,计算机根据数据类型分配对应大小的内存空间,C++内置有几种基本的数据类型,掌握这些基本类型后,可以通过结构体(struct)和类(class)创建自定义类型。
1.2.1 整型int
int类型用来存放整数(integer),一个int类型变量通常占用4个字节(byte),具体大小在不同平台上可能不同。计算机使用二进制方式存储数据,类似10001000,一个0或1占用1位(bit),一个字节占用8位,int类型变量占用32位,范围为-231~231。
修饰符short表示短整型,如short int a=123;占用2个字节,范围为-215~215,short等同于short int。修饰符long表示长整型,如long int a=12345678;占用4个字节,long等同于long int。
默认int类型有正负符号,使用修饰符unsigned表示无符号,如unsigned int a=12345678;范围为0~232,无符号修饰符unsigned对float、double、char同样适用。
【实例1-2】输出未赋值和赋值后的整型变量的值。
#include <iostream> using namespace std; int main() { int a; cout<<"未赋初值 a="<<a<<endl; //输出系统随机分配的值 a=123; cout<<"赋值后 a="<<a<<endl; //输出新值 return 0; }
编译运行,结果如图1-4所示。若未赋初值,系统随机分配一个初始值,为安全起见,建议声明变量同时赋初值,如int a=0;
图1-4 整型变量
1.2.2 浮点型float、double
浮点型用来存放小数,float表示单精度,占用4个字节,精度约为7位。double表示双精度,占用8个字节,精度约为15位。可使用科学计数法,例如小数0.0000123可表示为1.23e-5, e代表指数值(exponent),e-5即10的-5次方。C++默认将浮点数值当做double类型,例如数字1默认为int类型,1.0默认为double类型,若用float类型表示,可加上后缀f如1.0f。
【实例1-3】输出两个整数相除的值,以及小数与整数相除的值。
#include <iostream> using namespace std; int main() { double d1=1/7; //两个整数相除 double d2=1.0/7; //浮点数除以整数 cout<<"1/7 = "<<d1<<endl; cout<<"1.0/7 = "<<d2<<endl; return 0; }
编译运行,如图1-5所示。两个int类型相除得到的仍然是一个整型数,浮点数与整型数相除,整型数自动转换为浮点数,得到一个浮点值。
图1-5 浮点运算
Tips 若期望得到两个int类型变量相除的浮点结果,应先将其中一个变量强制转换为浮点类型。
1.2.3 字符型char
字符型char用来存放一个字符(character),占用1个字节,范围为-27~27,用两个单引号' '包括一个字符,如字母、数字、符号等。每个char字符对应有一个ASCII值,将char类型转换为int类型,得到的是char字符的ASCII值,同理,将int型转为char类型,得到的是ASCII值对应的字符。
【实例1-4】输出字符'0'对应的ASCII值,以及ASCII值0对应的字符。
#include <iostream> using namespace std; int main() { char ch='0'; int a=ch; cout<<"字符'0'对应的值:"<<a<<endl; //输出字符’0’对应的值 ch=0; cout<<"值0对应的字符为:"<<ch<<endl; //输出值0对应的字符 return 0; }
编译运行,结果如图1-6所示。字符'0'对应的ASCII值为48,ASCII值0对应的字符为'\0','\0'是一个转义字符,常作为字符串结束标志,类似有'\n'表示换行,'\\'表示一个\。
图1-6 字符类型
1.2.4 布尔型bool
布尔型bool用于逻辑判断,只有两个值true和false。布尔型和其他类型可以转换,0代表false,所有非0数值代表true,将bool值转为整数时,true为1,false为0。
【实例1-5】输出浮点值转换得到的bool值,以及false值。
#include <iostream> using namespace std; int main() { double d=0.0001; bool b1=d; bool b2=false; cout<<"0.0001 -> "<<b1<<endl; //double转为bool cout<<"false -> "<<b2<<endl; //输出bool return 0; }
编译运行,结果如图1-7所示。
图1-7 bool类型
1.2.5 宽字符型wchar t
宽字符型wchar_t用于表示世界上所有的字符,全世界有广泛的语种,如中文、韩文、日文、阿拉伯文等,char类型只能表示200多个基本字符,因而出现了ANSI和Unicode两种字符集,ANSI对应char单字节类型,Unicode对应wchar_t双字节类型。Unicode采用双字节编码可以表示世界上所有的字符,更具通用性。
【实例1-6】输出字符'a'、'爱'对应的值,以及char和wchar_t占用的字节数。
#include <iostream> using namespace std; int main() { wchar_t wch1='a'; //英文字符'a' wchar_t wch2='爱'; //中文字符'爱' cout<<wch1<<endl; cout<<wch2<<endl; cout<<"char "<<sizeof(char)<<endl; //char大小 cout<<"wchar_t "<<sizeof(wchar_t)<<endl; //wchar_t大小 return 0; }
编译运行,结果如图1-8所示。中文字符'爱'对应的值超出了char的范围,需要用wchar_t类型表示。运算符sizeof可以得到某一数据类型或变量占用的字节数,char为1个字节,wchar_t为2个字节。
图1-8 wchar_t类型