算术运算符合和算术表达式
运算符的优先级:
C语言中,远符的远优先级共分为15级。1级最高,15级最低。在表还式中,优先级较高的先于优先级较低的进行运算。而在一个运量两侧的运符优先鉛相同时,则按运算符的结合性所规定的结合方向处理。
运算符的结合性:
C语言中各运算符的结性分为两种,即左结性(左至右)和右结(右至左)。
例如术运算符的结名性是自左至右,即先左后右。如有表达式×+y-z则y应先与’-'号结合,行×-y,然后+z的远算。
这种自左至右的结方向就称为“左结合牲”。而右至左的结合方向称为“右结合性”。最典型的右结性运符是赋运符。如x=y=z由于“=”的右结合性,应先行y=z再枕行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区別,以辟免理解错误。
自增、自减运算符
i++ //i参与运算后,i的值再自增1
i-- //i参与运算后,i的值再自减1
++i //i自增1后再参与其他运算
--i //i自减1后再参与其他运算
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i = 1;
printf("%d\n",i);//i=i=1
printf("%d\n",i++);//i=i=1输出为1 但i自身+1=2
printf("%d\n",i--);//i=i=2输出为2 但i自身-1=1
printf("%d\n",++i);//i=i+1=2输出为2
printf("%d\n",--i);//i=i-1=1输出为1
}
练习:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i = 5,j = 5,p,q;
p = (i++) + (i++) + (i++);//5+6+7
q = (++j) + (++j) +(++j);//6+7+8
printf("%d,%d,%d,%d\n",p,q,i,j);
}
赋值运算符和赋值表达式
赋值运算符
变量 = 表达式
x = a + b
赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此
a = b = c = 5
可理解为
a = ( b = 5 = ( c = 5 )
类型转换
如果赋值运符两边的数据类型不相同,系统将动进行类型转换,即把赋埴右边的类型换成左边的类型。具体规定如下:
1)实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。
2)整型赋予突型,数埴不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
3)字符型赋予整型,由于字符型为一个字节,而整型为4个字节,故将字符的AsCII码放到整型量的低八位中,高八位为0。整型赋予字符型,只杷低八位赋予字符量。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a,b = 111;
float x,y = 6.66;
char c = 'k', c2;
a = y;//a=6.66
x = b;//x=111.0
a = c;//a='k'=107
c2 = b;//c2=111='o'
printf("%d,%f,%d,%c",a,x,a,c2);
}
复合的赋值运算符
在赋值符“=”之前加上其他二目运算符可构成复合赋值符。如
+=,
-=,
/=,
%=,
<<=,
>>=,
>&=,
>^=,
>!=.
a += 5 等价于 a = a + 5;
x *= y + 7 等价于 x = x * (y + 7)
复合赋值符这种写法,有利于编译处理。
逗号运算符和逗号表达式
在C语言中逗号“,”也是一种运锫,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般死式为:
表达式1,表达式2
其求值过程是分别求两个表达式的,并以表达式2的值作为整个逗号表达式的值。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a = 7, b = 3, c = 6, x, y;
y = ((x = a + c),(b + c));//y=b+c
printf("y = %d,x = %d\n",y,x);
}
对于逗号表达式要说明两点:
1)逗号表达式一般形式中的表达式1和表达式2也可以又是逗号表达式
例如:
表达式1,(表达式2,表达式3)
型成了嵌套情形。因此可以把逗号表达式扩为以下形式:
表达式1,表达式2,…表达式n
整个逗号表达式的值等于表达式n的值。
2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。并不是在所有出现逗号的地方都组成源号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int f;
f = (10,2,3,(7,8),1);
printf("f = %d\n",f);
}