第2章 基本数据类型.ppt
《第2章 基本数据类型.ppt》由会员分享,可在线阅读,更多相关《第2章 基本数据类型.ppt(86页珍藏版)》请在麦多课文档分享上搜索。
1、第2章 基本数据类型,基本数据类型的特征 数据常量 数据类型转换 数据的控制台输入与输出,C语言提供有丰富的数据类型:,2.1 基本数据类型的特征,C语言提供的基本数据类型包括char(字符)型、int(整)型、float(单精度实)型、double(双精度实)型。并且还可以通过使用short、long、signed和unsigned修饰char和int,用long修饰double,形成更多的类型。,2.1.1 数值的定点表示与浮点表示,定点表示和浮点表示,是C语言基本数据类型的重要特征。为了说明什么是“定点”,什么是“浮点”,先看值的几种表示形式: 日常的表示法 C语言中的表示形式3.141
2、59100 3.14159e00.314159101 0. 314159e+10.0314159102 0.0314159e+231.415910-1 31.4159e-13141.5910-3 3141.59e-3,浮点形式存储,2.1.2 整数的有符号类型与无符号类型,内存中的数值是以补码形式存放的,一个正数的补码就是该数的二进制数(如10的补码为00000000 00001010)。求一个负数的补码的方法如下:如-10的补码可以这样求: 先取该数的绝对值; 先取10 然后以二进制形式表示; 10的二进制码为 00000000 00001010 再对其取反; 取反得11111111 111
3、10101 然后加1; 加1,得 11111111 11110110,即-10的16位存储形式为:11111111 11110110。,2.1.3 类型宽度与取值范围,C语言对不同类型的数据分配不同宽度的存储空间,典型的存储空间宽度有:1个字节(8位)、2个字节(16位)、4个字节(32位)、8个字节(64位)和10个字节(80位)几种。显然,不同的长度,对应的数据的取值范围是不同的。当然,同样长度的取值范围还与有无符号、是定点表示(整型)还是浮点表示(实型)有关。另外还取决于所用的编译系统。大多数编译系统对一个带符号整数的数值范围处理为:-2n-1 2n-1-1。其中n为该整数所占的比特数。
4、如果一个整数所占的比特数为16,则该想整数的苑围为-32 767 32 767。也有一些编译系统对一个带符号整数的数值范围处理为:-(2n-1 1) 2n-1-1。如果一个整数所占的比特数为16,则该想整数的苑围为-32 768 32 768。,不同长度整型数据的取值范围,C语言中不同长度实型数据的取值范围和表数精度,C语言提供了一个测定某一种类型数据所占存储空间长度的运算符“sizeof”它的格式为:sizeof (类型标识符或数据)当不了解所使用的编译器中的某数据类型的宽度时,可以使用这个运算符计算之。,例2.1 用sizeof运算符测定所用的C系统中各种类型数据的长度。 /* 文件名:e
5、x020101.c */ /* 测定数据类型长度 */#include int main(void) int i = 0;printf (“char: %d bytes.n“,sizeof(char);printf (“short: %d bytes.n“,sizeof(short);printf (“i: %d bytesn“,sizeof (i); /* 计算变量i的字节数*/printf (“long: %d bytesn“,sizeof(long);printf (“float: %d bytesn“,sizeof(float);printf (“double: %d bytesn“,
6、sizeof(double);printf (“1.23456: %d bytesn“,sizeof(1.23456); /* 计算常量的字节数*/printf (“double: %d bytesn“,sizeof(double);return 0; ,用VC+6.0 编译并运行,得到以下结果: char: 1 bytes short: 2 bytes i: 4 bytes long: 4 bytes float: 4 bytes double: 8 bytes 1.23456: 8 bytes,2.2 数据常量,2.2.1 整型常量 整数常量的三种进制在C语言中,整型常量可以使用十进制数、
7、八进制数、十六进制数等几种形式书写。C语言规定,程序中 凡出现以数字0开头的数字序列,一律作为八进制数处理;凡出现以0x开头,后面跟若干位数字的,一律作为十六进制数处理;其它数字作为十进制数处理。,下面是合法的整型常量:,5121(十进制正整数) 0111(八进制正整数,等于十进制数73) 010007(八进制正整数,等于十进制数4103) 0177777(八进制正整数,等于十进制65537) 0XFFFF(十六进制正整数,等于十进制数65537) 0xA3(十六进制正整数,等于十进制数163) -32768(十进制负整数),下面不是合法的整型常量:,09876(非十进制数,又非八进制数,因为
8、有数字8和9)20fa(非十进制数,又非十六进制数,因为不是以0x开头)0x10fg(出现了非法字符),2. 整数常量类型的确定,在C语言中整数可以进一步分为short、int、long和long logn等类型。那么,对于一个常数如何分辨其类型呢?一般说来,有以下原则: 1)默认原则:在没有任何特别标志的情况下,可以按照常数所在的范围,决定其类型。例如,在16位的机器中,当一个常整数的值在十进制-3276832767(八进制数00177777、十六制数0x00xFFFF),则被看作一个short int或int型整数。超出上述范围的整常数,则被看作长整数(32位)表示。例如,234、3276
9、6、0177776、0xFFFE等被看作是int型,而-32769、32768、0200000、0x10000等被看作是long型。,2)后缀字母标识法: 用L或l表示long类型整数。用LL或ll表示long long类型整数。用U或u表示unsigned类型。,例如: -12L(十进制long整数) -12LL(十进制long long整数) 774545L(十进制long整数) 076L(八进制long整数,等于十进制数32768) 0100000L(八进制long整数,等于十进制62) 0x12l(十六进制long整数,等于十进制数18) 0X8000l(十六进制long整数,等于十进
10、制数32768) 12345u(十进制unsigned int类型) 12345UL(十进制unsigned long类型) 在16位字长的机器中,一旦把一个常数表示成long整数,系统便将其存储空间扩充为4个字节。从值的大小上看,12L与12没有区别,但它们占用的存储空间不相同,2.2.2 字符类型及其常量,1. 可打印字符字符类型的数据在内存中以相应的ASCII代码存放。例如,a的ASCII码为97,则在内存中的二进制存储形式为:01100001。,例2.2/* 文件名:ex020201.c */#include int main(void) char ch; /* 定义了一个字符类型的变
11、量ch */ch = a;printf (%d,ch); /* 使用整型格式码 */return 0; 运行结果为: 97,例2.3 /* 文件名:ex020301.c */#include int main(void) char ch;int i;ch = A;ch = ch + 32;i = ch;printf (%d is %cn,i,ch); /* 注意格式码 */printf(%c is %dn,ch,ch); /* 注意格式码 */return 0; 运行结果如下: 97 is a a is 97,例2.4 /* 文件名:ex020401.c */#include int main
12、(void) char c;c = 0362;printf (%dn, c);return 0; 运行结果: -14,2. 字符常量,ASCII字符分为可打印字符和不可打印字符两种。在C语言程序中,可打印字符常量是用一对单撇号括起来的一个字符,如a,A,?,。需要注意如下几点: 单撇号只是字符与其它部分的分隔符,或者说是字符常量的定界符,不是字符常量的一部分,当输出一个字符常量时不输出此撇号。 不能用双引号代替撇号,如a不是字符常量。 撇号中的字符不能是单撇号或反斜杠,如或不是合法的字符常量。,3. 转义字符,转义字符(反斜杠码)是C语言提供的处理一些特殊字符(包括一些不可打印字符)方法。重要
13、有如下一些: 用反斜杠开头后面跟一个字母代表一个控制字符(不可打印字符); 用代表字符“”,用代表撇号字符; 用后跟1到3个八进制数代表ASCII码为该八进制数的字符; 用x后跟1到2个十六进制数代表ASCII码为该十六进制数的字符。,转义字符表,例2.5 /* 文件名:ex020501.c */ /*打印人民币符号¥*/#include int main(void) printf(Yb=n);return 0; ,该程序运行时先打印一个字符“Y”。这时打印头已走到下一个位置,用控制代码b使打印头回退一格,即回到原先已打印好的Y位置再打印字符“=”,两字符重迭形成人民币符号“¥”。当然,这一输
14、出只能在打印机上实现,而不能在显示器上实现。因为显示器无此重迭显示功能(在显示后一字符时原在该位置上的字符消失)。转义字符除用来形成一个外设控制命令外,还用来输出不能直接从键盘上输入或不能用字符常量书写出的ASCII字符。这时要在反斜杠后跟一个代码值,这个代码值最多用三位八进制码数(不加前缀)或两位十六进制数(以x作前缀)表示。,例2.6/* 文件名:ex020601.c */ #include int main(void) char ch;ch=362;/*将八进制数362的ASCII字符赋给ch*/printf (%c,ch);return 0; 上运行可在显示屏上输出: ,4. 字符串常
15、数,在C语言中,把用一对双撇号括起来的零个或多个字符序列称为字符串常数。如:hello, Programming in C ,A , a , 等。字符串以双撇号为定界符,但双撇号并不属于字符串。要在字符串中插入撇号,应借助转义字符。例如要处理字符串I say: Goodby!时,可以把它写为I say: Goodby!字符串中的字符数称为该字符串的长度。字符串常数在机器内存储时,系统自动在字符串的末尾加一个“字符串结束标志”,它是转义字符“0”。如字符串“hello”在内存中存储为:,2.2.3 实型常量,C语言中的实型(浮点)数据常量用带小数点和小数分量的形式表示,如12.345,也可以用科
16、学记数法表示。C语言将实型数据分为:float、double和long double三种类型,并且默认的实型数据是double类型的。因此,对于带小数点的常量,C语言编译器会将之作为double类型看待。如果要特别说明某带小数点的常量是float类型或long double类型,可以使用后缀字母:用f或F表示float类型,如123.45f 1.2345e+2F.用l或L表示long double类型,如1234.5l 1.2345E+3L。使用科学记数法(指数形式)时,要求e的左边必须有数值部分(有效数字),可以是整数,也可以是小数形式;指数必须是整数形式。例如,e5、2e1.23、.e5等
17、都是不合法的。,2.2.4 符号常量,前面介绍的常量都是直接常量,从字面上即可直接看出它们的值是什么,因此又称“字面常量”。符号常量则是在一个程序(或程序的一部分)中指定的用名字代表的常量,从字面上不能直接看出其类型和值。例2.7 求圆面积和周长的两个程序。 程序1: /* 文件名:ex020701.c */ /* 计算圆的周长和面积 */ #include double calcuArea (double r); double calcuCircumference (double r);,2.2.4 符号常量,int main(void) printf (area=%f, calcuArea
18、 (2.0);printf (tcircumference=% fn, calcuCircum (2.0);return 0; double calcuArea(double r) /* 计算圆面积 */ return (3.141592654* r* r); double calcuCircum(double r) /* 计算圆周长 */ return (2.0* 3.141592654* r): 运行结果为: area = 12.566371 circumference = 12.566371,程序2: /* 文件名:ex020702.c */ /* 计算圆的周长和面积 */ #inclu
19、de define PI 3.141592654 /*定义符号常数*/ define R 2.0 double calcuArea(double r),; double calcuCircum(double r); int main(void) printf (area=%f, area (R);printf (tcircumference=%fn, circumference (R);return 0; double calcuArea(double r) return (PI* r* r) double calcuCircum(double r) return (2.0* PI* r);,
20、程序2的运行结果与程序1完全相同。程序2中PI代替3.141592654,用R代替20,使程序更容易理解,可读性好,而且当需要修改R的值时只需要改一处即可,方便又不易出错。定义符号常量的一种方法是使用define命令,它是一种“预编译命令”,在编译整个程序之前系统会先对程序中的预编译命令进行处理。上面define命令的作用是在预编译时将程序中凡出现PI的地方全部以3.141592654代替,凡出现R的地方一律以2.0代替。,2.3 数据类型转换,在下列情况下,C语言编译器,可能将数据从一种类型转换成另一种类型: (1)显式转换:使用转换表达式。 (2)隐式转换,包括:当二元运算符两端的操作数类
21、型不同时进行的转换;函数参数传递中的数据类型转换;函数返回时的数据类型转换;其他情形。,2.3.1 几个概念,数据类型的提升与降格提升可以分为如下3类情况: (1)类型提升:由整数转换为浮点数。 (2)整数提升:由短整数类型转换为长整数类型。 (3)同一长度的整数有符号与不有符号的,属于同一级别。,2. 符号位变为数据的最高位和最高位变成符号位,例2.8 分析下面程序的执行结果。 /* 文件名:ex020801.c */ #include int main(void) unsigned short us1 = 32767, us2 = 65535, us;signed short ss = -
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 数据类型 PPT
