2.2 数据的描述
在程序中为了更方便地使用数据,我们给数据指定一个名称,便于使用。同时为了更好地使用数,我们还将数进行归类并且对所用到的数据进行定义,即数据类型。下面主要讲解标识符的基本概念、如何命名和归类以及常用的各种数据类型。
2.2.1 C的构词方式——标识符
标识符是用户编程时使用的名字。在计算机语言中,对于变量、常量、函数、语句块都有自己的名字,我们称这些名字为标识符。标识符命名是有一定规则的,其规则如图2.20所示。
图2.20 标识符命名的规则
下面的标识符名是合法的:
year,Day,ATOK,x1,_ CWS,_change_to
而如图2.21所示的标识符名是不合法的。
图2.21 不合法的标识符
在C语言中,标识符是区分大小写的,例如,“Abad1”与“abad1”是两个不同的标识符。根据作用不同,C语言的标识符可以分为以下三类,如图2.22所示。
图2.22 标识符的分类
2.2.2 特殊的标识符
这一节我们主要讲解C语言中的特殊标识符也就是关键字和预定义标识符。
1.关键字
关键字也称为保留关键字,是指被系统已经用于特定用途的标识符。这些标识符不能再被用户使用。由ANSI标准定义的C语言关键字共32个,如表2.4所示。
表2.4 常见的关键字
C语言中的标识符,在程序中都代表固定的含义,不能另作它用,它们不能用做变量名或函数名。希望读者能够把表2.4中所示的常用关键字熟记,以便在以后C程序开发的过程中提高程序开发的效率,避免错误使用关键字。
注意:C语言的关键字都用小写字母书写,不能用大写字母书写。例如,关键字int不能写成 INT。由于关键字有特定的用途,所以一定不能用于其他场合。
2.预定义标识符
预定义标识符在C语言中也有定义,如函数printf、scanf、sin等,以及编译预处理命令名(如define、include)。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意。
2.2.3 整数类型
整数类型用来表示一个整数。C语言中常用三种形式表示它:十进制、八进制、十六进制。下面进行简要介绍。
1.整数类型的二进制表示
整数是以二进制的形式在计算机中存储的,存储的时候分为有符型和无符型。下面以整数45为例,它的二进制存储形式如图2.23所示。
图2.23 整数在计算机中的存储形式
2.扩展整数类型——short、long
short类型说明符为short int或short,其取值为短整常数。long类型说明符为long int或long,其取值为长整常数。这两种扩展类型的内存字节以及表示数的范围如表2.5所示(本书中以VC++ 6.0的32位编译器为准)。
表2.5 short和long型
3.无符号类型——unsigned
无符号类型说明符为unsigned。它可以单独使用也可以作为前缀,都表示无符号整数,即永远为非负的整型变量。下面以无符型整数45为例,图2.24显示了无符型在内存中存储的形式。
图2.24 无符型的二进制存储形式
4.总结
综合扩展类型和无符号两种情况,C语言支持的整型类型共六种,如表2.6所示。
表2.6 六种整型
2.2.4 浮点类型
实数其实就是在数轴上定义的一一对应的点,我们常用浮点表示法来表示实数,所以也就出现了浮点类型。浮点数是利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。
1.浮点类型的二进制表示
浮点数真值的二进制表达式是:N=±2E*M。对表达式的解释如图2.25所示。
图2.25 N=±2E*M
浮点数在计算机中的二进制的表示形式如图2.26所示。
图2.26 浮点数的二进制表示形式
根据浮点的精度不同又分为单精度(float)、双精度(double)和长双精度(long double)浮点型。根据VC++ 6.0 32位编译器,float占4字节,double占8字节,long double占8字节(不同的系统会有差异)。float和double类型在二进制中存储的符号位、指数位以及尾数位所占的位数不同,具体如表2.7所示。
表2.7 float和double的对比图
2.总结
根据浮点数的精度以及有无符号,浮点类型可以归结为3种,如表2.8所示。
表2.8 3种浮点型
2.2.5 字符类型
在C语言中,每一个字符在内存中占一个字节,字符在内存中都是以0和1代码进行二进制储存的,并且存储的值是其与ASCII码表对应的ASCII码值。ASCII码表如表2.9所示。
表2.9 ASCII码表
表2.9中出现的控制字符在表2.10中做一个简单说明。
表2.10 控制字符说明表