《第4章整型、字符型与浮点53872.ppt》由会员分享,可在线阅读,更多相关《第4章整型、字符型与浮点53872.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、联系方式:http:/北京源智天下科技有限公司第第4 4章章 整型、字符型与浮点型整型、字符型与浮点型本章将重点介绍本章将重点介绍C语言提供的语言提供的三组基本数据类型三组基本数据类型的使用,的使用,包括:包括:整型、字符型和浮点型整型、字符型和浮点型。C语言中的其他高级语言中的其他高级数据类型实质上都可以视为这些基本数据类型的组数据类型实质上都可以视为这些基本数据类型的组合。通过本章的学习,要掌握以下知识:合。通过本章的学习,要掌握以下知识:联系方式:http:/北京源智天下科技有限公司第第4 4章章 整型、字符型与浮点型整型、字符型与浮点型各种整型数据类型的使用;各种整型数据类型的使用;各
2、种字符型数据类型的使用;各种字符型数据类型的使用;各种浮点型数据类型的使用;各种浮点型数据类型的使用;使用使用printf函数和函数和scanf函数处理各种类型数据;函数处理各种类型数据;使用使用typedef自定义数据类型;自定义数据类型;const和和volatile的使用。的使用。联系方式:http:/北京源智天下科技有限公司4.1 4.1 整型数据类型整型数据类型C语言定义了语言定义了4种整型数据类型以表示不同大小的整数数值。种整型数据类型以表示不同大小的整数数值。short int,短整型,短整型int,整型,整型long int,长整型,长整型long long int,长长整型,
3、长长整型联系方式:http:/北京源智天下科技有限公司4.1.1 4.1.1 字节长度字节长度在不同的编译器和不同的硬件环境中,不同整型的字节长度在不同的编译器和不同的硬件环境中,不同整型的字节长度可能不同。但是都具有以下关系,可能不同。但是都具有以下关系,short int的长度不大于的长度不大于int的长度,的长度,int的长度不大于的长度不大于long int的长度,的长度,long int的的长度不大于长度不大于long long int的长度。范例的长度。范例4-1可以得到各种可以得到各种整数数据类型的字节长度。整数数据类型的字节长度。联系方式:http:/北京源智天下科技有限公司4
4、.1.2 4.1.2 修饰符修饰符signedsigned和和unsignedunsignedsigned和和unsigned称为符号修饰符,可以用来作为上面四称为符号修饰符,可以用来作为上面四种整型数据类型的前缀,以组成有符号整数和无符号整数,种整型数据类型的前缀,以组成有符号整数和无符号整数,如下所示:如下所示:signed short int,unsigned short int,signed int,unsigned int,signed long int,unsigned long int,signed long long int,unsigned long long int带带si
5、gned前缀的数据类型和无符号修饰符的整型一样,都可前缀的数据类型和无符号修饰符的整型一样,都可以表示所有整数;以表示所有整数;而有而有unsigned修饰的数据类型都只能修饰的数据类型都只能用来表示无符号数,即非负整数。用来表示无符号数,即非负整数。联系方式:http:/北京源智天下科技有限公司4.1.3 4.1.3 整型常量整型常量整型常量是指用以表示整型数值的常量,可以分为短整型整型常量是指用以表示整型数值的常量,可以分为短整型(short int)、整型()、整型(int)、长整型()、长整型(long int)和长)和长长整型(长整型(long long int)四种。表)四种。表4
6、-1是数值为是数值为74的不同的不同进制的整型常量的表示形式。进制的整型常量的表示形式。联系方式:http:/北京源智天下科技有限公司4.1.3 4.1.3 整型常量整型常量与作为数据类型后缀不同的是,在与作为数据类型后缀不同的是,在printf函数和函数和scanf函数中,当长度修饰符和符号修饰符都存在时,位函数中,当长度修饰符和符号修饰符都存在时,位置不能互换。置不能互换。符号修饰符与进制符不能共存。符号修饰符与进制符不能共存。进制符有进制符有5种:种:d、x、X、o和和i。d表示十进制,表示十进制,x和和X表示十六进制,表示十六进制,o表示八进制表示八进制,i表示三种进制中任意表示三种进
7、制中任意一种。一种。联系方式:http:/北京源智天下科技有限公司4.1.3 4.1.3 整型常量整型常量其中十六进制符(其中十六进制符(x和和X)中,进制符)中,进制符x只能接受只能接受09和和小写字母小写字母af,进制符,进制符X只能接受只能接受09和大写字母和大写字母AF。例如,把长长整型十六进制数例如,把长长整型十六进制数FFFFFFFFFF以八进制以八进制形式输出,如下所示:形式输出,如下所示:printf(%llon,0 xFFFFFFFFFFll);输出结果为:输出结果为:17777777777777联系方式:http:/北京源智天下科技有限公司4.1.4 4.1.4 整型变量整
8、型变量整形变量是指整形变量是指用以存储用以存储整型数值的变量整型数值的变量。与整型常量一样,。与整型常量一样,整型变量也可以分为短整型、整型、长整型和长长整型四整型变量也可以分为短整型、整型、长整型和长长整型四种类型;种类型;并且每种类型都可以分为有符号和无符号两种,并且每种类型都可以分为有符号和无符号两种,而有符号数与没有符号前缀的变量完全一样。各而有符号数与没有符号前缀的变量完全一样。各类型的定类型的定义形式如下:义形式如下:signed short int data_h;unsigned short int data_uh;signed int data_d;unsigned int d
9、ata_ud;signed long int data_l;unsigned long int data_ul;signed long long int data_ll;unsigned long long int data_ull;联系方式:http:/北京源智天下科技有限公司4.1.5 4.1.5 整型的存储方式整型的存储方式整型按照存储方式和数值区间的不同,可分为两大类:有符整型按照存储方式和数值区间的不同,可分为两大类:有符号整型和无符号整型。其中,有符号整型在内存中的存储号整型和无符号整型。其中,有符号整型在内存中的存储分为两部分:符号部分和数值部分。例如,分为两部分:符号部分和数值
10、部分。例如,int型在内存型在内存中的存储形式如下图所示。中的存储形式如下图所示。联系方式:http:/北京源智天下科技有限公司4.1.5 4.1.5 整型的存储方式整型的存储方式例如,例如,unsigned int型在内存中的存储形式如下图所示。型在内存中的存储形式如下图所示。联系方式:http:/北京源智天下科技有限公司4.1.6 4.1.6 整型的数值范围整型的数值范围在前面的讨论中,在前面的讨论中,可以知道不同整型数据的字节长度不同,可以知道不同整型数据的字节长度不同,因此它们的可表示的数值范围也是不同的因此它们的可表示的数值范围也是不同的,如下表所示。,如下表所示。联系方式:http
11、:/北京源智天下科技有限公司4.1.6 4.1.6 整型的数值范围整型的数值范围所有变量在内存中的存储状况如下表所示。所有变量在内存中的存储状况如下表所示。联系方式:http:/北京源智天下科技有限公司4.1.6 4.1.6 整型的数值范围整型的数值范围程序中程序中4个变量均赋值为其数据类型所能表示范围的边界个变量均赋值为其数据类型所能表示范围的边界值,存储状态如下表所示。当再增加或减小这些变量的值值,存储状态如下表所示。当再增加或减小这些变量的值时,数据将时,数据将溢出溢出。联系方式:http:/北京源智天下科技有限公司4.1.6 4.1.6 整型的数值范围整型的数值范围【代码解析代码解析】
12、同样,本程序中同样,本程序中4个变量也都被赋值为其数据个变量也都被赋值为其数据类型所能表示范围的边界值,存储状态如下表所示。同样,类型所能表示范围的边界值,存储状态如下表所示。同样,当增加或减小这些变量的值时,数据将溢出。当增加或减小这些变量的值时,数据将溢出。联系方式:http:/北京源智天下科技有限公司4.2 字符型数据类型字符型数据类型C语言中的字符型数据只有一种,即语言中的字符型数据只有一种,即char型数据类型,因此型数据类型,因此也直接把也直接把char型称为字符型。使用符号修饰符还可以得型称为字符型。使用符号修饰符还可以得到无符号字符型和有符号字符型,如下所示:到无符号字符型和有
13、符号字符型,如下所示:signed char,有符号字符型,有符号字符型unsigned char,无符号字符型,无符号字符型本节将先讨论字符型的本节将先讨论字符型的字节长度字节长度,再讨论了字符常量和字符,再讨论了字符常量和字符变量的使用,最后介绍了字符型的存储方式。变量的使用,最后介绍了字符型的存储方式。联系方式:http:/北京源智天下科技有限公司4.2.1 4.2.1 字节长度字节长度在在C标准中,标准中,char型的字节长度被定义为型的字节长度被定义为1位位。与整型数据。与整型数据类型一样,也可以使用符号修饰符来得到无符号类型一样,也可以使用符号修饰符来得到无符号char型型和显式的
14、有符号和显式的有符号char型,它们的字节长度都是一样的。型,它们的字节长度都是一样的。联系方式:http:/北京源智天下科技有限公司4.2.2 4.2.2 字符常量字符常量字符常量,即字符常量,即用以表示字符的常量用以表示字符的常量。C语言中的字符常量都语言中的字符常量都包含在单引号中包含在单引号中,单引号内具体的内容可分为两种:,单引号内具体的内容可分为两种:1单个字符单个字符单个字符常量是指单引号内只含一个字符的常量,例如:单个字符常量是指单引号内只含一个字符的常量,例如:a,b,1,m这些字符常量输出到屏幕上的这些字符常量输出到屏幕上的结果即为引号内的字符本身结果即为引号内的字符本身。
15、2转义字符转义字符以反斜杆(以反斜杆()开头的转义字符,其作用是把反斜杆后面的)开头的转义字符,其作用是把反斜杆后面的字符转换为特定形式字符转换为特定形式。比如:。比如:n,t,123,x12联系方式:http:/北京源智天下科技有限公司4.2.2 4.2.2 字符常量字符常量下表列出了常用的转义字符的含义。下表列出了常用的转义字符的含义。联系方式:http:/北京源智天下科技有限公司4.2.2 4.2.2 字符常量字符常量由于字符常量只占由于字符常量只占1个字节,因此该类型只能表示个字节,因此该类型只能表示256个值。个值。正因为字符型可表示的数值个数有限的特点,正因为字符型可表示的数值个数
16、有限的特点,在在C标准中,标准中,字符常量的字符常量的0127部分被一一映射为部分被一一映射为ASCII码。码。联系方式:http:/北京源智天下科技有限公司4.2.3 4.2.3 字符变量字符变量字符变量是用以存储字符型数值的变量。字符型变量也有两字符变量是用以存储字符型数值的变量。字符型变量也有两种:有符号型和无符号型。定义形式如下:种:有符号型和无符号型。定义形式如下:signed char ch1;unsigned char ch2;对字符型变量赋值有两种方式。一种是使用字符常量,比如:对字符型变量赋值有两种方式。一种是使用字符常量,比如:char c1=n;unsigned c2=n
17、;联系方式:http:/北京源智天下科技有限公司4.2.3 4.2.3 字符变量字符变量另一种是使用整型赋值,整型会另一种是使用整型赋值,整型会自动转化为自动转化为相应的相应的ASCII码码复制给字符变量。比如:复制给字符变量。比如:char c1=97;*即即a*unsigned c2=49;*即即1*printf函数和函数和scanf函数对函数对字符型数据字符型数据的处理格式为的处理格式为%c。联系方式:http:/北京源智天下科技有限公司4.2.4 4.2.4 字符型的存储方式字符型的存储方式字符型数据类型的存储方式和整型十分相似。字符型数据类型的存储方式和整型十分相似。有符号字符型和有
18、符号整型一样,有符号字符型和有符号整型一样,最高位为符号位最高位为符号位,其余部其余部分都属于数值部分分都属于数值部分,其值等于该字符型数据的数值的绝对,其值等于该字符型数据的数值的绝对值。值。无符号字符型只含数值部分。无符号字符型只含数值部分。联系方式:http:/北京源智天下科技有限公司4.3 4.3 浮点型数据类型浮点型数据类型C语言共定义了如下三种浮点型数据类型以表示不同精度不语言共定义了如下三种浮点型数据类型以表示不同精度不同数值范围的浮点数。同数值范围的浮点数。float,单精度型,单精度型double,双精度型,双精度型long double,长双精度型,长双精度型联系方式:ht
19、tp:/北京源智天下科技有限公司4.3.1 4.3.1 字节长度字节长度C标准中对不同浮点型的字节长度有以下规定:标准中对不同浮点型的字节长度有以下规定:float型不大型不大于于double型,型,double型不大于型不大于long double型。型。在不同在不同编译器和不同硬件环境下,各类型的字节长度有所变化编译器和不同硬件环境下,各类型的字节长度有所变化。联系方式:http:/北京源智天下科技有限公司4.3.2 4.3.2 浮点型常量浮点型常量浮点型常量是浮点型常量是用以表示浮点数值的常量用以表示浮点数值的常量。浮点型常量有三种。浮点型常量有三种类型:类型:float型常量、型常量、
20、double型常量和型常量和long double型常型常量。量。C语言中的浮点型数值默认为双精度类型,语言中的浮点型数值默认为双精度类型,可以使用可以使用f或或F作为后缀得到单精度型常量,或使用作为后缀得到单精度型常量,或使用l或或L作为后缀得作为后缀得到长双精度常量。它们的表示有小数形式和指数形式两种到长双精度常量。它们的表示有小数形式和指数形式两种形式。形式。小数形式的示例有:小数形式的示例有:1500.13、3.1415926、-0.007。指数形式有三部分,数值指数形式有三部分,数值1、e或或E、数值、数值2,其值等于(数,其值等于(数值值1)(10的(数值的(数值2)次方)。上述小
21、数形式的示例用)次方)。上述小数形式的示例用指数表示依次为:指数表示依次为:1.50013e3,31415.926E-4,-0.7e3,中间的中间的e大小写均可。大小写均可。联系方式:http:/北京源智天下科技有限公司4.3.2 4.3.2 浮点型常量浮点型常量浮点型常量的整数部分为浮点型常量的整数部分为0时,省略整数部分的时,省略整数部分的0也是合法的也是合法的,比如:比如:-0.007可以写为可以写为-.007,-0.7e3可以写为可以写为-.7e3。指数形式中,指数形式中,e前面必须有数字前面必须有数字,数值,数值2必须存在且为整数。必须存在且为整数。以下形式是非法的:以下形式是非法的
22、:1.e7e前面必须紧挨着数字前面必须紧挨着数字0.77e3.2e后面必须为整数后面必须为整数e2e前必须有数字前必须有数字2ee后面必须有整数后面必须有整数联系方式:http:/北京源智天下科技有限公司4.3.3 4.3.3 浮点型变量浮点型变量浮点型变量是用以存储浮点型数值的变量。浮点型变量是用以存储浮点型数值的变量。C语言中定义了语言中定义了三种浮点型变量:三种浮点型变量:float型变量(单精度变量),型变量(单精度变量),double型变量(双精度变量)和型变量(双精度变量)和long double型变量(长双精度型变量(长双精度变量)。下面是这几种浮点类型定义变量的形式如下:变量)
23、。下面是这几种浮点类型定义变量的形式如下:float f;double d;long double ld;联系方式:http:/北京源智天下科技有限公司4.3.3 4.3.3 浮点型变量浮点型变量从前面的讨论可以知道,基本上,三种类型所占的字节长度从前面的讨论可以知道,基本上,三种类型所占的字节长度是不一样的,因此它们能表示的精度和数值范围也是不一是不一样的,因此它们能表示的精度和数值范围也是不一样的,如下表所示。样的,如下表所示。联系方式:http:/北京源智天下科技有限公司4.3.4 4.3.4 浮点型的精度浮点型的精度不同浮点型的精度不同,精度从低到高依次为不同浮点型的精度不同,精度从低
24、到高依次为float型、型、double型和型和long double型。下面的程序可以检测三种浮型。下面的程序可以检测三种浮点型的精度。点型的精度。联系方式:http:/北京源智天下科技有限公司4.3.5 4.3.5 浮点型的数值范围浮点型的数值范围不同浮点型可以表示的数值范围也不同,由于浮点型在内存不同浮点型可以表示的数值范围也不同,由于浮点型在内存中是以科学计数法的方式来存储的,因此其数值范围只能中是以科学计数法的方式来存储的,因此其数值范围只能使用数量级范围来表示。可表示的数量级范围从小到大为使用数量级范围来表示。可表示的数量级范围从小到大为依次为:依次为:float型、型、doubl
25、e型和型和long double型。型。联系方式:http:/北京源智天下科技有限公司4.3.6 4.3.6 浮点型的存储方式浮点型的存储方式浮点型的存储方式和其他类型有很大不同,而不同编译器之浮点型的存储方式和其他类型有很大不同,而不同编译器之间也存在差别,但大部分都遵从间也存在差别,但大部分都遵从IEEE数值标准。下面以数值标准。下面以Linux下的下的GCC 3.2.2的实现为例,讨论浮点型的存储方的实现为例,讨论浮点型的存储方式。式。浮点型的内存形式包含浮点型的内存形式包含3个部分:个部分:1符号位符号位浮点型的符号位只有一位,为其最高位。如果该位为浮点型的符号位只有一位,为其最高位。
26、如果该位为1,则,则表示其为负数;如果该位为表示其为负数;如果该位为0,则表示其为非负数。,则表示其为非负数。联系方式:http:/北京源智天下科技有限公司4.3.6 4.3.6 浮点型的存储方式浮点型的存储方式2指数位指数位浮点型的指数位以浮点型的指数位以补码形式补码形式存储其科学计数法表示形式的指存储其科学计数法表示形式的指数部分。指数位决定浮点型可存储的数值范围。但是,需数部分。指数位决定浮点型可存储的数值范围。但是,需要注意的是,浮点型数据的内存形式中的指数位的值并非要注意的是,浮点型数据的内存形式中的指数位的值并非真正的指数值,真正的指数值为该类型的偏差值减去该存真正的指数值,真正的
27、指数值为该类型的偏差值减去该存储值的结果。偏差值是为了校正指数值而设定的,每种类储值的结果。偏差值是为了校正指数值而设定的,每种类型的偏差值是固定的,不同类型的偏差值不同。型的偏差值是固定的,不同类型的偏差值不同。联系方式:http:/北京源智天下科技有限公司4.3.6 4.3.6 浮点型的存储方式浮点型的存储方式3基数位基数位基数位是浮点型的最后一部分,其位数决定精确度。基数位是浮点型的最后一部分,其位数决定精确度。long double型的基数位即为其科学计数法的基数位的二进制型的基数位即为其科学计数法的基数位的二进制表示形式。表示形式。float型和型和double型的基数位与型的基数位
28、与long double型略有不同。由于科学计数法的基数表示为二进制时,由型略有不同。由于科学计数法的基数表示为二进制时,由于二进制中除了于二进制中除了0即为即为1,故可以确定其整数位肯定为,故可以确定其整数位肯定为1。因此,为了得到多一位的存储空间,存储因此,为了得到多一位的存储空间,存储float型和型和double型数据时,省去基数的整数位,而默认其整数位型数据时,省去基数的整数位,而默认其整数位为为1。联系方式:http:/北京源智天下科技有限公司4.3.6 4.3.6 浮点型的存储方式浮点型的存储方式在不同浮点型中,这三个部分所占空间不同,下表列出了在不同浮点型中,这三个部分所占空间
29、不同,下表列出了GCC中各浮点类型的分段情况。中各浮点类型的分段情况。联系方式:http:/北京源智天下科技有限公司4.4 4.4 使用使用typedeftypedef定义类型定义类型除了前几节介绍的除了前几节介绍的C语言自带的数据类型外,程序员还可以语言自带的数据类型外,程序员还可以使用关键字使用关键字typedef定义自己的数据类型。本节将介绍定义自己的数据类型。本节将介绍typedef语句的作用以及如何在语句的作用以及如何在C中合理使用中合理使用typedef语句。语句。联系方式:http:/北京源智天下科技有限公司4.4.1 4.4.1 typedeftypedef的标准形式的标准形式
30、typedef作用是为数据类型起一个新的名字作用是为数据类型起一个新的名字。typedef语句由语句由三个部分组成:三个部分组成:关键字关键字typedef、原数据类型名和新数据、原数据类型名和新数据类型名类型名。其标准形式如下:。其标准形式如下:/*typedef 原数据类型原数据类型 新数据类型新数据类型*/typedef oldType newType;在其后面的程序中,便可以使用在其后面的程序中,便可以使用newType来代替来代替oldType。执行执行typedef语句后,编译器会将程序中遇到的语句后,编译器会将程序中遇到的newType使用使用oldType来代替。例如:来代替。
31、例如:typedef char myChar;myChar c=c;联系方式:http:/北京源智天下科技有限公司4.4.1 4.4.1 typedeftypedef的标准形式的标准形式C语言还允许对新的数据类型名再次使用语言还允许对新的数据类型名再次使用typedef,即对别名再起,即对别名再起一个别名。一个别名。例如:例如:typedef int myInt_t;typedef myInt myInt32;/*正确正确*/程序中的程序中的myInt32将先被替代为将先被替代为myInt,而,而myInt的原型为的原型为int,所,所以以myInt32最后又被最后又被int替代。但是所有的新
32、数据类型名只能单替代。但是所有的新数据类型名只能单独组成数据类型,不能作为其他数据类型的一部分。独组成数据类型,不能作为其他数据类型的一部分。(接上面的程序)(接上面的程序)typedef unsigned int IntU_t;/*正确正确*/typedef unsigned myInt myIntU_t;/*错误:不可将别名作错误:不可将别名作为其他数据类型的一部分为其他数据类型的一部分*/myInt32 a;/*正确正确*/unsigned myInt32 b;/*错误:不可将别名作为其他数错误:不可将别名作为其他数据类型的一部分据类型的一部分*/联系方式:http:/北京源智天下科技有
33、限公司4.4.2 4.4.2 合理使用合理使用typedeftypedef使用使用typedef一般有以下几个用途:一般有以下几个用途:联系方式:http:/北京源智天下科技有限公司1 1简化复杂的类型申明简化复杂的类型申明使用使用typedef给名字较长的数据类型起一个简短的名字,简给名字较长的数据类型起一个简短的名字,简化书写化书写。比如:。比如:typedef unsigned long long int LLU_t;typedef的这个特点,在后面章节中讨论到复杂数据类型和的这个特点,在后面章节中讨论到复杂数据类型和复杂指针时会得到更好的体现。复杂指针时会得到更好的体现。联系方式:ht
34、tp:/北京源智天下科技有限公司2 2提高程序的提高程序的可维护性和移植性可维护性和移植性在程序中,对于一些数据类型可能会改变的变量,一般都使在程序中,对于一些数据类型可能会改变的变量,一般都使用数据类型别名来申明该变量。比如,一个学生成绩管理用数据类型别名来申明该变量。比如,一个学生成绩管理系统中,学生的各科成绩最初要求处理为整数。因此,程系统中,学生的各科成绩最初要求处理为整数。因此,程序中与成绩相关的所有变量都定义为序中与成绩相关的所有变量都定义为int,如下所示:,如下所示:int math;后来,需求发生了变化,学生的成绩有可能含有小数,此时后来,需求发生了变化,学生的成绩有可能含有
35、小数,此时就需要改变与成绩相关的所有变量的定义,都改为就需要改变与成绩相关的所有变量的定义,都改为float型。如下所示:型。如下所示:float math;联系方式:http:/北京源智天下科技有限公司2 2提高程序的可维护性和移植性提高程序的可维护性和移植性这样的修改相当麻烦,费时。但是如果在最初的设计中,将这样的修改相当麻烦,费时。但是如果在最初的设计中,将所有类型可能变化的变量在定义前为其量身定制一个数据所有类型可能变化的变量在定义前为其量身定制一个数据类型的话,将类型的话,将大大提高程序的可维护性大大提高程序的可维护性。typedef int score_t;score_t math
36、;score_t phy;score_t engl;score_t score_tmp;当系统要求成绩为小数时,则只需改变当系统要求成绩为小数时,则只需改变typedef语句。语句。typedef float score_t;联系方式:http:/北京源智天下科技有限公司3 3定义自己的数据类型集定义自己的数据类型集在一些程序中,为了提高程序的在一些程序中,为了提高程序的可维护性和可移植性可维护性和可移植性,经常,经常需要自定义一些数据类型集。比如下面这段代码展示了如需要自定义一些数据类型集。比如下面这段代码展示了如何使用何使用typedef定义一套完整的整数类型集。定义一套完整的整数类型集。
37、联系方式:http:/北京源智天下科技有限公司3 3定义自己的数据类型集定义自己的数据类型集01/*使用使用typedef定义定义8位、位、16位、位、32位和位和64位的整数类型位的整数类型*/02 typedef charint8_t;/*定义定义8位整数位整数*/03 typedef shortint16_t;/*定义定义16位整数位整数*/04 typedef intint32_t;/*定义定义32位整数位整数*/05 typedef long longint64_t;/*定义定义64位整数位整数*/06 typedef unsigned charuInt8_t;/*定义无符号定义无符
38、号8位位整数整数*/07 typedef unsigned shortuInt16_t;/*定义无符号定义无符号16位整数位整数*/08 typedef unsigned intuInt32_t;/*定义无符号定义无符号32位整位整数数*/09 typedef unsigned long long uInt64_t;/*定义无符号定义无符号64位整数位整数*/联系方式:http:/北京源智天下科技有限公司3 3定义自己的数据类型集定义自己的数据类型集在程序中可以使用这套整数类型集来代替在程序中可以使用这套整数类型集来代替C语言的内建语言的内建整数类型。但系统发生变化时,比如在新系统中,整数类型
39、。但系统发生变化时,比如在新系统中,int型的支持位数只有型的支持位数只有16位,而位,而long int型的支持位数型的支持位数有有32位,那么只需修改上述整数集中的位,那么只需修改上述整数集中的int32_t和和uInt32_t的的typedef。如下所示:。如下所示:typedef long int32_t;typedef unsigned long uInt32_t;联系方式:http:/北京源智天下科技有限公司4.5 4.5 限定词限定词constconst与与volatilevolatile关键字关键字const与与volatile是是C语言中的两个数据类型限定词,语言中的两个数据
40、类型限定词,均在变量定义中使用。把一个变量定义为均在变量定义中使用。把一个变量定义为const,意味着,意味着该变量的值将不会被改变,而把一个变量定义为该变量的值将不会被改变,而把一个变量定义为volatile,则告诉编译器不要对该变量进行优化,则告诉编译器不要对该变量进行优化。本节将先后讨论。本节将先后讨论限定词限定词const和和volatile的使用。的使用。联系方式:http:/北京源智天下科技有限公司4.5.1 4.5.1 使用使用constconst限定词限定词const在在C语言中的主要作用是语言中的主要作用是定义只读变量定义只读变量。只读只读变量的值在定义后不能再被改变变量的值
41、在定义后不能再被改变。使用。使用const的形式如下:的形式如下:const 数据类型名数据类型名 变量名变量名=初始值初始值;也可以把关键字也可以把关键字const放在数据类型名和变量名中间,如下放在数据类型名和变量名中间,如下所示:所示:数据类型名数据类型名 const 变量名变量名=初始值初始值;下面是几个定义下面是几个定义const变量的实例:变量的实例:const int NUM_MONTH=12;const double PI=3.1415926;const char RIGHT=T;const char WRONG=F;联系方式:http:/北京源智天下科技有限公司4.5.1 4
42、.5.1 使用使用constconst使用使用const变量有以下变量有以下4个好处:个好处:1提高程序的可读性提高程序的可读性2提高程序的可维护性提高程序的可维护性3避免只读变量被意外修改避免只读变量被意外修改4提高程序效率提高程序效率联系方式:http:/北京源智天下科技有限公司4.5.2 4.5.2 使用使用volatilevolatile限定词限定词volatile告诉编译器其修饰的变量是随时可能变化的,告诉编译器其修饰的变量是随时可能变化的,编译器优化时必须每次都重新读取这个变量的值,而不是编译器优化时必须每次都重新读取这个变量的值,而不是使用保存在寄存器里的备份使用保存在寄存器里的
43、备份。例如:。例如:01int main(void)02 int data=10;03 int a,b;0405 a=data;06 /*中间不对中间不对data进行操作进行操作*/07 b=data;08 09联系方式:http:/北京源智天下科技有限公司4.5.2 4.5.2 使用使用volatilevolatile除了除了无需初始化无需初始化,volatile的使用语法和的使用语法和const一样,其标准一样,其标准使用形式为:使用形式为:volatile 数据类型名数据类型名 变量名变量名;或或数据类型名数据类型名 volatile变量名变量名;例如,上述例子中把变量例如,上述例子中把
44、变量data定义为定义为volatile的语句如下:的语句如下:volatile int data=10;此外,此外,可以使用限定词可以使用限定词const和和volatile同时修饰一个变量,同时修饰一个变量,如下所示:如下所示:const volatile int data=10;联系方式:http:/北京源智天下科技有限公司4.6 4.6 综合练习综合练习1.设计一个程序,要求输入一个设计一个程序,要求输入一个char型、一个型、一个int型和一个型和一个float型数据,再将其输出。型数据,再将其输出。【提示提示】使用使用scanf函数来实现数据输入,使用函数来实现数据输入,使用pri
45、ntf函函数来实现数据输出。数来实现数据输出。联系方式:http:/北京源智天下科技有限公司4.6 4.6 综合练习综合练习2请设计一个程序,将输入的小写字母对应的大写字母输请设计一个程序,将输入的小写字母对应的大写字母输出。出。【提示提示】查看查看ASCII码表,观察小写字母和大写字母排放的码表,观察小写字母和大写字母排放的位置,可以发现每一个小写字母与其大写字母的差值都是位置,可以发现每一个小写字母与其大写字母的差值都是一样的,为一样的,为32。该值可以使用表达式(。该值可以使用表达式(a-A)求得。求得。3设计一个程序来验证浮点数的精度损失。设计一个程序来验证浮点数的精度损失。【提示提示】将一个有效数字位数超过将一个有效数字位数超过8位的数值赋值给一个位的数值赋值给一个float型变量,该变量得到的值为数值损失后的结果。型变量,该变量得到的值为数值损失后的结果。