内容正文:
YCF
正版可修改PPT
(中职)C语言程序设计模块四ppt电子课件
1
运算符——C语言的血液
模块4
LOGO
4.1第1级:()、[ ]、->、.
(1)()运算符:在多个运算符中,括号运算优先运算。这个与数学运算方式保持一致。例如:
int a;
a=a+(a=4); /*先()号运算,给变量a赋常量值4;因为“+”运算高于赋值“=”运算,故先执行4+4运算;最后执行赋值“=”运算,结果a值等于8*/
printf("%d",a); /*输出8*/
(2)[]为变址运算符(后述)。
(3)->为指向结构体成员运算符(后述)。
(4).为结构体成员运算符(后述)。
1.!:逻辑非运算
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
(1)其值为:非0即1,即只有0和1两个逻辑值。例如:
int a=6,b=0,c=0,d;
d=!a+!b+!c;/*!a结果为0;!b结果为1;!c结果为1;故d最后得2*/
printf("%d-%d",!d,d); /*输出0-2*/
(2)要领会条件语句中的含义。例如:
if条件判断中,if(x)等同于if(x!=0),而if(!x)则等同于if(x==0)。while循环条件判断中,while(x)等同于while(x!=0),而while(!x)则等同于while(x==0)。
2.~:按位取反运算(简称位非运算)
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
(1)正整数的位非运算。由于正整数的原反补一致,故直接对原码取反,得新原码,此时最高位变1,即为负,对该新原码求补码即得位非值。
可见,正整数位非结果变负。例如:
int a=6; printf("%d",~a); /*输出-7*/
计算方法如下:
2.~:按位取反运算(简称位非运算)
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
(2)负整数的位非运算。由于负整数在内存中是以补码形式存在的,所以必须先对负整数求补码,再取反。此时最高位为0,为正,正数原反补一致,直接计算结果即得位非值。
可见,负整数位非结果变正。例如:
int a=-6; printf("%d",~a);/*输出5*/
计算方法如下:
3.++、--:自增自减运算符
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
(1)前置时,如++i,--j,要先增减后运算。
(2)后置时,如i++,j--,要先运算后增减。
(3)只能用于单个变量自增自减,不能用于表达式,如(x+y)++或--(x+y)是错误的;也不能用于常量,如++3,4--等也都是错误的。
例如:
int i=3;
printf("%d-%d\n",i++,++i);/*printf()函数里的运算是从右往左的,故先计算++i,即先自增1到4,再做输出运算,输出4;执行i++时,先做输出运算,输出4,再自增1,i实际变为5。故输出4-4*/
printf("%d\n",i);/*输出自增后的值,即5*/
3.++、--:自增自减运算符
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
再如:
int x=2,y=3,d;
d =y*x+(y--)+(++x);/*先执行++x,变量x增1得值3,而y--要先运算再自减,故先不动,则右边为3*3+3+3,得15,故d被赋值 15,y参加了运算,再自减1,为2*/
printf("d=%d,x=%d,y=%d\n",d,x,y);/*输出d=15,x=3,y=2*/
(4)结合方式:自左向右。例如:
a+++b---c;/*实际上就是:(a++)+(b--)-c;*/
(5)i++本质就是i=i+1。
4.(类型):强制数据类型转换运算符
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
数据类型的转换有两种,一种是自动转换,另一种是强制转换。
(1)自动转换:由低向高自动转换,其中有两个必然转换。
①float型在运算时一定会先自动转换成double型。
②short和char型在运算时一定会先自动转换成int型。
4.(类型):强制数据类型转换运算符
4.2第2级: !、~、++、--、+、-、(类型)、&、*、sizeof()
(2)强制转换:分为显式强制转换和隐形强制转换,显式强制转换必须用()号把转换类型括起来。例如:
/*显式强制转换:*/
(int)3.58; /*强制转换3.58为整型,即为3*/
int x=25,m; float y=25.0;
printf("%f\n",(float)x); /*强制转换变量x为浮点型,输出值