序
C++语言提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。
整型(integer)
在C++语言中,整型类型标识符为int。根据整型变量的取值范围又可将整型变量定义为以下8种整型类型:
数
据
类型
定义标识符 占
字
节
数
数值范围 短
整
型
short[int] 2(16位)
-32768~32767 整
型
[long] int 4(32位) -2147483648~2147483647 长
整
型
long [int] 4(32位) -2147483648~2147483647 超
长
整
型
long long [int] 8(64位) -9223372036854775808~9223372036854775807 无
符
号
整
型
unsigned [int] 2(16位) 0~65535 无
符
号
短
整
型
unsigned short [int] 2(16位) 0~65535 无
符
号
长
整
型
unsigned long [int] 4(32位) 0~4294967295 无
符
号
超
长
整
型
unsigned long long 8(64位) 0~18446744073709551615
实型(Real types)
数据类型 定义标识符 数值范围 占字节数 有效位数 单精度实型 float -3.4E-38~3.4E+38 4(32位) 6~7位 双精度实型 double -1.7E+308~1.7E+308 8(64位) 15~16位 长双精
度实型
long double -3.4E+4932~1.1E+4932 16(128位) 18~19位 布尔变量 bool 真true或假false之一 1(8位) \
字符型(char)
字符常量有以下两种表示法:
1、普通表示形式
字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符(表2-4)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','A','0'等。如字符A的序号是65,字符a的序号是97, 字符0的序号的48。
2、转义字符表示形式
转义字符有三种用法:表示控制字符、表示特殊字符、表示所有字符。常用的转义字符如下表所示。
转义字符 含义 '\n' 换行 '\t' 水平制表 '\b' 退格 '\r' 回车(不换行) '\0' 空字符 '\’' 单引号 '\”' 双引号 '\\' 一个反斜杠字符 '\ddd' 1~3位八进制数所代表的字符 '\xhh' 1~2位十六进制数所代表的字符 ASCII编码表见下图:
例题
【例1】分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。
【参考程序】
#include<iostream> using namespace std; int main() { int x; short y; cout<<sizeof(x)<<" "<<sizeof(y)<<endl; //sizeof返回一个对象或者类型所占的内存字节数 return 0; }
基于char数据的这个特点,它可以和int变量一样做加减运算,例1说明了这种用法。
【例2】计算ASCII值
【参考程序】
#include<cstdio> #include<iostream> using namespace std; int main() { int b = 'A'; //初始b值 b *= 2; //相当 b = b*2 printf("%d",b); //输出b值 return 0; }
【程序解释】
①程序定义int整型变量b,但是并没有初始化一个整数,而是字符‘A’,通过ASCII码表可以查到A对应的十进制ASCII码值是65。
②然后做b *= 2的运算,b = b*2,即65×2,结果为130。
数据类型转换
C++语言中,不同数据类型的运算对象进行混合运算,或者需要将一个表达式的结果转换成期望的类型时,就需要依据数据类型转换规则进行转换。
1、混合运算时的类型转换规则
整型、实型、字符型数据间可以混合运算。在这种情况下,需要将不一致的数据类型转换成一致的数据类型,然后进行运算。为了保证运算精度,系统在运算时的转换规则是将存储长度较短的运算对象转成存储长度较长的类型,然后再进行处理。这种转换是系统自动进行的,具体如图所示。
混合运算时的类型转换规则
【说明如下】
1)纵向箭头表示必定会进行的转换,如float型数据必先转换为double型数据,然后与其他操作数 进行运算。与此类似,char型或short型数据必先转换为int型数据,然后进行运算。 2)横向箭头表示当运算对象为不同类型数据时的转换方向,如int型数据与unsigned型数据进行运 算,int型转换为unsigned型后方可进行运算。int型与double型进行运算,int型直接转换为double 型后进行运算,不能理解为先转换为unsigned int型,然后转换为long int型,最后再转换为double型。
2、赋值时的类型转换规则
当赋值运算符两侧的数据类型不同时,需进行类型转换,这种转换是系统自动进行的,转换规则如下:
1)float、double型赋值给int型:直接截断小数。 例如,“int i=f+0.6;”,f的值为4.0,右边算术表达式运算后的结果为4.6的double型数据,根据上述转换原则,直接舍弃小数,所以i的值为4。
2)int、char型赋值给float、double型:补足有效位以进行数据类型转换。 例如:“float f=4;”,float为7位有效数字,所以f的值为4.0000000。
3)char型(1字节)赋给int型(4字节):数值赋给int型的低8位,其它位补0。
4)long int型赋值给int型:long int型截断低字节给int型。
5)int型赋值给long int型:赋给long int型的低16位,如果int型的最高位是0,则long int的高16位全为0;如果int型的最高位是1,则long int型的高16位全为1(称为“符号扩展”)。 6)unsigned int型赋值给int型:直接传送数值。
7)非unsigned int型赋值给位数相同的unsigned int型:直接传送数值。
3、强制类型转换
在C++语言中,还允许强制类型转换,即将某一数据的数据类型转换为指定的另一种数据类型,强制类型转换只是临时转换。强制转换运算符组成的运算表达式的一般形式为:
(类型名)(表达式)
例如:已知有变量定义“int b=7;float a=2.5,c=4.7;”,求下面算术表达式的值。
a+(int)(b/3*(int)(a+c)/2.0)%4
根据运算符的结合性规则,表达式要自左至右执行,b/3为2,2*(int)(a+c)为14,14/2.0为7.0,强制类型转换后为7,7%4为3,a的值2.5与3相加,最终结果为5.5。
4、例题
计算成绩
【题目描述】
牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
牛牛想知道,这门课程自己最终能得到多少分(整数)。
样例输入:100 100 80 样例输出:90
【分析】 如果根据题目描述,将A,B,C定义为整型数据,而在运算过程中出现浮点型数据,就会涉及数据类型的转换,最后以整型输出。 程序如下:
#include<iostream> using namespace std; int main(){ int A,B,C,ans; cin>>A>>B>>C; //输入A,B,C成绩 ans=(int)(A*0.2+B*0.30+C*0.50); //强制类型转换,不加(int)自动转换 cout<<ans; //输出总成绩 return 0; }
总结
有不懂的地方可以si我,和我一起学习C++吧。
备注
还没有下载DEV-C++的小伙伴们可以私我拿到免费安装包