资源描述
Edit Master title,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,第二章,第二章,本章要点,数据的存储及数据类型,数据的表示常量和变量,数据的运算及其规则,本章要点数据的存储及数据类型,2.1 数据的存储及数据类型,以二进制形式存储,计算机存储器的存储单元按字节编址,C语言针对不同类型的数据采用不同的存储方式具体体现在不同的“,数据类型,”上,2.1 数据的存储及数据类型以二进制形式存储,C语言提供了以下一些数据类型:,数据类型,构造类型,指针类型,空类型(,无值类型)void,枚举类型 enum,数组类型,结构体类型 struct,联合体类型,union,基本类型,整型 int,字符型 char,实型(浮点型),单精度实型,float,双精度实型,double,C语言提供了以下一些数据类型:数据,整数的存储方式:,以十进制补码形式存储。,一般整数占用的空间:,Turbo C 2.0:2个字节的存储单元,Turbo C+3.0,:2个字节的存储单元,VC+6.0:4个字节,根据占用空间和数值范围的不同细分为几种类型:,基本整型int 无符号的基本整型 unsigned int,短整型 short int 无符号的短整型 unsigned short int,长整型 long int 无符号的长整型 unsigned long int,整数的存储方式:,类型声明符,字节数,取值范围,int,2,-3276832767 即-2,15,(2,15,-1),short int,2,-3276832767 即-2,15,(2,15,-1),long int,4,-21474836482147483647 即-2,31,(2,31,-1),unsigned int,2,065535 即 0(2,16,-1),unsigned short,2,065535 即 0(2,16,-1),unsigned long,4,04294967295 即 0(2,32,-1),以Turbo C+3.0为例:,类型声明符字节数取值范围int2-3276832767,实数的存储形式:,实数采用指数形式存储,即浮点数。,将实数转化为,标准化指数形式,,,分别存储尾数部分和指数部分。,类型 位数 绝对值范围 有效数字,float 4字节,10,-38,10,38,7,Double 8字节,10,-308,10,308,16,long double 16字节 10,-4932,10,4932,19,实数的存储形式:类型 位数,单个字符的存储方式:,存储字符的编码;,目前大多数计算机采用ASCII代码;,占用的空间:一个字节的存储空间。,例如:,字符A,为char类型,在内存中占1字节,存储的是其ASCII码值65。,单个字符的存储方式:,2.2 程序中数据是如何表示的?,常量、变量,常量:,程序运行过程中,其值不能被改变的量。常量也相应地区分为不同的类型,:,#include,void main(),int i,x,s,avg;,i=0;,s=0;,do,scanf(%d,s=s+x;,i=i+1;,while(i10);,avg=s/10;,printf(avg=%dn,avg);,整型 125,-100,0,,037,,,0 x38,默认为int,可以用后缀指 明类型:,289L,32767L,39u,39090u,65536Lu,实型 3.14,-3.7e9,.23e-3 默认double类型,9.6f为float型,字符型,a,b,2,字符串“a”,“ab”,,“,1234”,八进制,十六进制,2.2 程序中数据是如何表示的?常量、变量#include,#include,void main(),int a;,a=32767+1;/*int+int */,printf(a=%d,a);,运行时显示?,-32768,01111111,11111111,32767,00000000,00000001,1,-,10000000,00000000,-32768,小心结果“溢出”!,整型数据运算中应该注意的问题:,请思考:,long a;,a=32767+1;,a:-32768,long a;,a=,32767L,+1;,a:32768,00000000,00000000,01111111,11111111,32767L,00000000,00000000,00000000,00000001,1,-,00000000,00000000,10000000,00000000,32768,#include 运行时显示?-32,(1)字符本质上是整数,既可以当作字符,也可以当作整数使用;,printf(“%c,%d,%c,%c”,a,a,a-32,97-32);,运行时显示?,a,97,A,A,字符型数据注意的问题:,(2)有些特殊字符无法正常表示出来,需要使用转义符“”进行转义。,换行符(ASCII码值为10)表示为n,即把字母n转义为换行符。,如:,int a=10,b=20;,printf(“a=%dnb=%dn”,a,b);,(1)字符本质上是整数,既可以当作字符,也可以当作整数使用;,转义字符,表示含义,ASCII码,反斜杠字符“”,92,单引号字符,39,”,双引号字符,34,n,换行,将当前位置移到下一行开头,10,t,水平制表,横向跳到下一个输出区,9,r,回车,将当前位置移到本行开头,13,f,打印换页,将当前位置移到下页开头,12,b,退格,将当前位置移到前一列,8,ddd,1到3位八进制数所代表的字符,xhh,1到2位十六进制数所代表的字符,printf(a=%dtb=%ctTCPIPn,26,101);,转义字符表示含义ASCII码反斜杠字符“”92单引,变量:,指在程序的执行过程中其值可以发生变化的量。,#include,void main(),int i,x,s,avg;,i=0;,s=0;,do,scanf(%d,s=s+x;,i=i+1;,while(i,|),(5),赋值运算符(及其扩展赋值运算符),(6),条件运算符(?:),(7),逗号运算符 (,),2.3.3 运算符,(8)指针运算符(*和),(9),求字节数运算符(sizeof),(10),强制类型转换运算符((类型)),(11)分量运算符(-),(12)下标运算符(),(13)其他(如函数调用运算符(),(8)指针运算符(*和),关系运算符:,(!,),(1)关系表达式的值:,真1,假0,例如:if(,+b=10,),if(,x%2=0,),if(,a!=b,),if(,c=A,),(2)优先级与结合性:,左结合,例如:if(,ab=0,),if(,bc,),if(,A=cb&bc,),if(,A=c&cb,),if(,!a,),(2)优先级与结合性:,左结合,例如:if(,!a|b,),if(,y%4=0&y%100!=0|y%400=0,),优先级与结合性,数值转换为逻辑量:非0真,0假,另外还要注意“,短路,”问题,逻辑运算符:(!|)(,赋值运算符:,(以及扩展的赋值运算符,),(1)计算表达式的值后赋值给变量,例如:a,=,b*2/3;,i,=,i+1;,(2)赋值表达式的值:,赋值后变量的值,例如:printf(%d,a,=,30);,(3)优先级与结合性:,右结合,例如:a,=,b,=,c,=,0;等价于 a=(b=(c=0);,(4)右侧表达式类型与变量类型不符时如何转换?,原则:以变量类型为准自动变换。,优先级与结合性,C语言的表达式加上分号成为一条语句。,赋值运算符:(以及扩展的赋值运算符)(1)计算表达式,赋值运算符:,(以及扩展的赋值运算符,),(5)扩展的复合赋值运算符:,+=-=*=/=%=,例如:a,+=,b*2/3;等价于:a=a+(b+2/3);,优先级与结合性,条件运算符:,(?:,),例如:printf(%dn,ab?a:b,);,d=ab?a:,bc?b:c,;/*右结合性*/,赋值运算符:(以及扩展的赋值运算符)(5)扩展的复合,逗号运算符:,(,),例如:,a=10,b=a+20,c=90,;,左结合性;整个表达式的值取最后一个表达式的值。,优先级与结合性,逗号运算符:(,)例如:a=10,b=a+20,c=9,高,优先级,运算符,功能,结合性,高,低,!,-、+、,-,(类型名),*、&、sizeof,逻辑非,取负、自增、自减,强制类型转换,指针、地址、求字节数,从右到左,*、/、%,乘、除、整数求余,从左到右,+、-,加、减,从左到右,、=、=,大于、大于等于,小于、小于等于,从左到右,=、!=,等于、不等于,从左到右,&,逻辑与,从左到右,|,逻辑或,从左到右,?:,条件运算符,从右到左,=、+=、-=、,*=、/=、%=,赋值、运算并赋值,从右到左,,,逗号运算符,从左到右,返回,高优先级运算符功能结合性高!逻辑非从右到左*、/、%乘、除,作业:,一、二、三、四(1,2)、五,作业:一、二、三、四(1,2)、五,
展开阅读全文