2.1 C语言的数据类型
2.2 常量与变量
2.2.1 标识符命名
2.2.2 常量
2.2.3 变量
2.3 整型数据
2.3.1 整型常量
2.3.2 整型变量
2.4 实型数据
2.4.1 实型常量
2.4.2 实型变量
2.5 字符型数据
2.5.1 字符常量
2.5.2 字符串常量
2.5.3 转义字符
2.5.4 符号常量
2.5.5 字符变量
2.6 运算符
2.6.1 算术运算符
2.6.2 自增和自减
2.6.3 关系和逻辑运算符
2.1 C语言的数据类型
C语言有五种基本数据类型:字符、整型、单精度实型、双精度实型和空类型。尽管这几种类型数据的长度和范围随处理器的类型和C语言编译程序的实现而异,但以b i t为例,整数与C P U字长相等,一个字符通常为一个字节,浮点值的确切格式则根据实现而定。对于多数微机,表2 - 1给出了五种数据的长度和范围。
表2-1 基本类型的字长和范围
类型
长度(bit)
范围
char(字符型)
8
0~255
int(整型)
16
-32768~32767
float(单精度型)
32
约精确到6位数
double(双精度型)
64
约精确到12位数
void (空值)
0
无值
表中的长度和范围的取值是假定CPU的字长为16 bit。
C语言还提供了几种聚合类型(aggregate types),包括数组、指针、结构、共用体(联合)、位域和枚举。这些复杂类型在以后的章节中讨论。
除void类型外,基本类型的前面可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:
• signed(有符号)。
• unsigned(无符号)。
• long(长型符)。
• short(短型符)。
修饰符signed、short、long和unsigned适用于字符和整数两种基本类型,而long还可用于double(注重,由于long float与double意思相同,所以ANSI标准删除了多余的long float)。
表2 - 2给出所有根据ANSI标准而组合的类型、字宽和范围。切记,在计算机字长大于1 6位的系统中, short int与signed char可能不等。
表2-2 ANSI标准中的数据类型
类型
长度(bit)
范围
char(字符型
8
ASCII字符
unsigned char(无符号字符
8
0~255
signed char(有符号字符型)
8
-128~127
int(整型)
16
-32768~32767
unsigned int(无符号整型)
16
0~65535
signed int(有符号整型)
16
同 int
short(短整型)
8
-128~127
unsigned short int(无符号短整型)
8
0~255
signed short int(有符号短整型)
8
同short int
long int(长整型)
32
2147483648~2147483649
signed long int(有符号长整型)
32
2147483648~2147483649
unsigned long int(无符号长整型)
32
0~4294967296
float(单精度型)
32
约精确到6位数
double(双精度型)
64
约精确到12位数
*表中的长度和范围的取值是假定CPU的字长为16 bit。
因为整数的缺省定义是有符号数,所以singed这一用法是多余的,但仍答应使用。某些实现答应将unsigned用于浮点型,如unsigned double。但这一用法降低了程序的可移植性,故建议一般不要采用。
为了使用方便,C编译程序答应使用整型的简写形式:
• short int 简写为short。
• long int 简写为long。
• unsigned short int 简写为unsigned short。
• unsigned int 简写为unsigned。
• unsigned long int 简写为unsigned long。
即,int可缺省。
2.2 常量与变量
2.2.1 标识符命名
在C语言中,标识符是对变量、函数标号和其它各种用户定义对象的命名。标识符的长度可以是一个或多个字符。绝大多数情况下,标识符的第一个字符必须是字母或下划线,随后的字符必须是字母、数字或下划线(某些C语言编译器可能不答应下划线作为标识符的起始字符)。
下面是一些正确或错误标识符命名的实例。
正确形式 错误形式
count 2count
test23 hi!there
high_balance high..balance
ANSI标准规定,标识符可以为任意长度,但外部名必须至少能由前8个字符唯一地区分。
这里外部名指的是在链接过程中所涉及的标识符,其中包括文件间共享的函数名和全局变量名。这是因为对某些仅能识别前8个字符的编译程序而言,下面的外部名将被当作同一个标识符处理。
counters counters1 counters2
ANSI标准还规定内部名必须至少能由前31个字符唯一地区分。内部名指的是仅出现于定义该标识符的文件中的那些标识符。
C语言中的字母是有大小写区别的,因此count Count COUNT是三个不同的标识符。
标识符不能和C语言的要害字相同,也不能和用户已编制的函数或C语言库函数同名。
2.2.2 常量
C语言中的常量是不接受程序修改的固定值,常量可为任意数据类型,如下例所示:
数据类型 常量举例
char 'a'、'\n'、'9'
int 21、123 、2100 、-234
long int 35000、 -34
short int 10、-12、90
unsigned int 10000、987、40000
float 123.23、4.34e-3
double 123.23、12312333、-0.9876234
C语言还支持另一种预定义数据类型的常量,这就是串。所有串常量括在双撇号之间,例如"This is a test"。切记,不要把字符和串相混淆,单个字符常量是由单撇号括起来的,如'a'。
2.2.3 变量
其值可以改变的量称为变量。一个变量应该有一个名字(标识符),在内存中占据一定的存储单元,在该存储单元中存放变量的值。请注重区分变量名和变量值这两个不同的概念。所有的C变量必须在使用之前定义。定义变量的一般形式是:
type variable_list;
这里的type必须是有效的C数据类型,variable_list(变量表)可以由一个或多个由逗号分隔的多个标识符名构成。下面给出一些定义的范例。
int i, j, l;
short int si;
unsigned int ui;
double balance, profit,loss;
注重C语言中变量名与其类型无关。
2.3 整型数据
2.3.1 整型常量
整型常量及整常数。它可以是十进制、八进制、十六进制数字表示的整数值。
十进制常数的形式是:
digits
这里digits可以是从0到9的一个或多个十进制数位,第一位不能是0。
八进制常数的形式是:
0digits
在此,digits可以是一个或多个八进制数( 0~7之间),起始0是必须的引导符。
十六进制常数是下述形式:
0xhdigits
0Xhdigits
这里hdigits可以是一个或多个十六进制数(从0~9的数字,并从“ a”~“ f”的字母)。
引导符0是必须有的,X即字母可用大写或小写。
注重,空白字符不可出现在整数数字之间。表2 - 3列出了整常数的形式。
表2-3 整常数的例子
十进制 八进制 十六进制
10 012 0Xa或0XA