1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 类型,(,type)、,运算符,(,operator)、,表达式,(,expression),基本数据类型,字符类型(,char,)(1byte),整型,(,short(2),int(2),long(4),unsigned,),单精度型(,float,)(4/7),实型(浮点型),双精度型(,double,)(8/15),枚举类型(,enum,),数组类型(,),构造类型 结构体类型(,struct,),共用体类型(,union,),指针类型(,*,),空类型(,void,),基本类型,数,据,类
2、型,定义形式:,类型标识符,:,变量名,1,变量名,2,变量名,3.,;,Type name:variable1,variable2,variable3,例如,:,int,a,b,c;,float x,y;,char c1,c2;,或,int,c1,c2;,变量初始化,(,initialization),在说明变量的同时给变量一个初始值。,int,a=5,b=3;,int,a=b=c=3;,int,a,b,c;a=b=c=3;,常量,(,constants),一、整型,(,integer type),(1),十进制形式,(,decimal):,与数学上的整数表示相同;,例如,:12,-100
3、0,(2),八进制形式,(,octal):,在数码前加数字,0,;,例如,:012=1*8,1,+2*8,0,=10(,十进制),(3),十六进制形式,(,hexadecimal):,在数码前加,0,X(,数字,0,和字母,X,)。,例如,:0,x12=1*16,1,+2*16,0,=18(,十进制),*,八进制的数码范围为,07,;,018,*,十六进制的,数码除了数字,0,9,外还使用英文字母,a f(,或,A F),表示,1015,。如:,0,x1e,二、实型,(,real type),(1),十进制小数,(,decimal fraction),形式:,由数字和小数点组成;例如,:3.
4、4,4.,.3,。,(2),指数,(,exponential),形式:,“,十进制小数,”,+,“,e(,或,E),”,+,“,十进制数整数,”,。,例如,:12.5,e-6,表示,12.5,10,-6,。,小数点不能单独出现;,0.,.0,.,e,或,E,的两边必须有数,且其后面必须为整数;,如:,6,E0.2,e5,关键字 字节数 取值范围 精度,(位),float 4 3.4,10,-38,3.4,10,38,7,double 8 1.7,10,-308,1.7,10,308,15,常量,三、字符型,(,character type),(1),用单引号括起来的一个字符;如:,A,、,1、
5、等,。,(2),用单引号括起来的由反斜杠,(,),引导的转义字符,。,四、字符串型,(,string),是用一对双引号括起来的字符序列。,如:,“,SHANGHAI,”,,,“,AbcdeFGHijk,”,,,“,How are you,”,。,注意:,a,与,“,a,”,的区别。,常量,五、符号常量,(,constants),是,用标,识符来表示一个数据;,在程序不能给它赋值。,定义形式,:,#,define,标识符,常量数据,例如,:,#,define P,I,3.14159,在程序预处理时,凡是出现标识符,PI,的地方都将用,数据,3.14159,来替换。,如,:2*2.3*,P,I
6、就,等价于,2*2.3*3.14159,。,常量,操作符与表达式,算术运算符,+-*/%,关系运算符 ,=!=,逻辑运算符!,&,位运算符,|&,赋值运算符,=,条件运算符?,:,逗号运算符,,指针运算符*和,&,求字节数运算符,sizeof,强制类型转换运算符,分量运算符,下标运算符,举例:,1、%(,取余,mod):5%3,的值为,2,;,-5%3,的值为,-2,;,5%(-3),的值为,2,;,12.3%3,2、,+,i,-i:,使用之前使,i,的值增,1,(或减,1,);,i+,i-:,使用之后使,i,的值增,1,(或减,1,);,例一:,int,i=3,j;,(1)j=i+;j=i
7、i+;,所以,i,的值为,4,,j,的值为,3.,(2),j=+i;i+;j=i;,所以,i,的值为,4,,j,的值为,4.,操作符与表达式,例二:,int,i=3,j;,j=-i+;,注意:,-,+,只对变量进行操作,不能对表达式操作。,j=(-i)+;,错误,正确,j=-(i+);,所以,i,的值为,3,,j,的值为,-2,。,例三:设,i=3,j=4,k=i+j,k=?,注意:,c,语言中处理字符时尽可能多的自左向右将若干字符组 成一个运算符,k=i+j,等价于,k=(i+)+j,操作符与表达式,3,、关系运算符,(,relational operator),优先级,(,precede
8、nce):(=),(=!=),结合性:自左至右;,表达式的值:若为真,则结果为,1,;,若为假,则结果,为,0,。,算术运算符优先级高于关系运算符,35,的值为,0,;,32,的值为,0,;,3+(43)*4,的值为,3,;,3+4,&,|,表达式的值:若为真,则结果为,1,;,若为假,则结果为,0,。,操作符与表达式,int,a=5;float b=3.5;,!a (,0,),!(a b)(,1,),a&b (,1,)!a&b(,0,),!a&!b (,0,)!(a&b)(,0,),&,:,只要有一个为假,结果则为假;,a,b (,1,)!a|b (,1,),!a|!b (,0,)!(a|b
9、)(,0,),|,:,只要有一个为真,结果则为真;,(,a 0)(,0,),(a 0)(,1,),操作符与表达式,!,高,算术运算符,关系运算符,&和|,赋值运算符 低,例:,5 3&2|8 4-!5,1&2|8 4-0,1,|,8 4,1|,0,1,操作符与表达式,注意:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,(1),a=0;b=1;,c=a+,结果,:,a,为1,b,为1,c,为0,。,(2),a=1;b=1;c=0;,d=-a,b-,(c=b+3);,结果,:,a,为0,b,为0,c,为0,d,为1。,操
10、作符与表达式,操作符与表达式,5、,位运算符,(,bitwise,inclusive operator,),&,bitwise,AND(,位与),|,bitwise,inclusive OR(,位或),bitwise,exclusive OR(,位异或),right shift(,右移),ones complement(unary)(,位取反)(一元运算符),注意:进行位运算时首先将操作数转换为二进制表示形式,操作符与表达式,1)位与运算,(,bitwise,AND),规则:参加运算的两个,bit,位都为1,结果为1,否则,结果为0。,说明:位与运算符&经常被用来将变量中的某些,bit,位屏蔽
11、掉(复位,设为0)。,例如:,n=n,语句作用是将变量,n,中除低7位以外所有的,bit,位的数据置(从而实现屏蔽数据),说明:八进制0177,二进制为0000000001111111,十进制为127),操作符与表达式,2)位或运算(,bitwise,OR),规则:参加运算的两个,bit,位至少有一个为1,结果为1,两个都为0,结果为0。,说明:位或运算符|经常用来将变量中的某些,bit,位置位(设为1)。,例如:,x=x|SET_ON;,语句作用是将变量,x,中与符号常量,SET_ON,中为1的,bit,位相对应的位置1。,操作符与表达式,3)位异或操作符运算(,bitwise,exclus
12、ive OR,),规则:参加运算的两个,bit,位互不相同,结果为1,两个,bit,位相同(都为0或者都为1,结果为0)。,说明:位或运算可以对某一变量某些,bit,位取反(与1进行异或,0变为1,1变为0;与0进行异或,0仍然为0,1仍然为1)。,操作符与表达式,4)取反操作符(,ones complement)(unary),的运算规则:将每一,bit,位取反,1变为0,0变为1。,例如:,x=x,功能是将,x,的低六位置,0,。(,077,的二进制为,00111111,;十进制为,63,)。,操作符与表达式,5)左移运算符和右移运算符的作用是将其左边操作数对应的二进制表达形式向左或者向右
13、移动其右边操作数指定的位数,右边的操作数必须是正数。,例如:,x2,,将,x,对应的二进制表示形式的,bit,位整体左移2位,空出的位补0。,移动后,x,的值与将,x,的值乘4后的值相等(左移1位相当于乘2,相应的,右移1位相当于除2)。,操作符与表达式,右移操作中,如果是,对,unsigned,类型变量右移,将左边空出的位置补0。如果是对,signed,类型变量右移,有些运行环境在最左边空出的位填入最高符号位的值(算术移位),有些在左边空出的位直接补零(逻辑移位)。,6、,赋值,(,assignment),运算符和赋值表达式,赋值运算符,=,赋值表达式:,用赋值运算符将变量和表达式连接起来的
14、式子,形式,:=,表达式的值:,被赋值变量的值,。,(1),x=(y=12)/4 y,值为,12,,x,值为,3,,表达式的值为,3,(2),x=y=12/4,y,值为,3,,x,值为,3,,表达式的值为,3,(3),x=(y=12/4),y,值为,3,,x,值为,3,,表达式的值为,3,(4)(,x=y)=12/4,操作符与表达式,6,、复合,(,complex),赋值运算符,a+=b,相当于,a=a+b,a*=b,相当于,a=a*b,a*=b+c,相当于,a=a*(b+c),而不是,a=a*b+c,int,a=12;a+=a-=a*a,1)a-=a*a a=a-a*a=12-144=-13
15、2,2)a+=-132 a=a-132=-132-132=-264,操作符与表达式,7,、条件表达式,(,conditional expression),int,max,a=5;b=3,max=ab?a:b max,及赋值表达式的值均为5;,ab?a:b+1,条件表达式的值,为4。,操作符与表达式,8,、,逗号,(,comma),运算符:,,,形式,:,逗号表达式,1,,逗号表达式,2,,,逗号表达式,n,求值规则,:,从左至右依次计算各表达式的值,;,优先级:最低;,表达式的值:最后一个表达式的值。,a b y,表达式,y=a=4,b=5,a+b;4 5 4 9,y=(a=4,b=5,a+b
16、);4 5 9 9,y=(a=4,b=5),a+b;4 5 5 9,y=a=(4,b=5),a+b;5 5 5 10,操作符与表达式,C,语言常用逗号作为分隔符,例如,:,int,a=3,b=4,c=5;,printf,(“%d,%d,%d”,(a,b,c);,printf,(“%d,%d,%d”,a,(a,b,c),c);,结果为,3,5,5,操作符与表达式,9,、,求,字节,(,byte),运算符:,sizeof,作用:求得变量或某种数据类型所需的字节数。,形式有两种:,sizeof,变量名,sizeof,(,类型名,),结果为整型数。,int,a;,float x;,printf,(“%
17、d,%d”,sizeof,a,sizeof,x);,printf,(“%d,%d”,sizeof,(,int,),sizeof,(float);,以上两个,printf,语句结果均为,2,4,。,操作符与表达式,10,、类型转换,(,type conversion),自动转换,(,auto)、,赋值转换,(,assignment),和强制转换。,(1,)实型,to,整型(字符型):去掉小数部分;,char c=68.5,Printf,(“%c”,c),(2),整型(字符型),to,实型:补足有效位;,float f=23;23.00000 f(7,位),double f=A;23.0000000000000 f(15,位),(3),强制类型转换时,得到所需类型的中间变量,原来变量的类型不会改变。,操作符与表达式,int,a=2,b=5;float x=4.4;,则有:表达式 结果,b/a 2,(float)b/a 2.5,(float)(b/a)2.0,(,int,)x%a+x 4.4,(,int,)x%(a+x),操作符与表达式,






