算术运算符和算术表达式
运算符的优先级:
C语言中 ,优先级分为15级。1级最高,15级最低。优先级较高的先于优先级低的进行运算,若二者优先级一致,则运算符结合性所规定的方向进行运算。
运算符的结合性:
C语言中,结合性分为两种,一种是左结合性另一种是右结合性。如果算术运算符的结合性是左结合性,即先左后右,例:x-y+z,则y先与-结合,执行x-y,再进行+z。而自右向左的结合方向则是右结合性。最典型的右结合性就是赋值运算符。例如:x=y=z,由于=的结合性是右结合性。应先执行y=z,再执行x=(y=z)运算。
以下是C语言中所使用的运算符的优先级以及其结合性:
如果优先级低的先进行运算,则要加括号进行运算。
强制类型转换运算符:
一般形式:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。(在前面几篇文章中也介绍过,这里就不再赘述。)
自增、自减运算符:
自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“–”,其功能是使变量的值自减1.自增自减1运算符均为单目运算符,都具有右结合性。可有以下几种形式:
++i: i自增1后再参与其他运算。
–i:自减1后再参与其他运算。
i++:i参与运算,i的值再自增1。
i–:i参与运算,i的值再自减1。
例如:
i = 5;
y = i++;(运算结果为y=5,i=6)
y = ++i;(运算结果为y=6,y=6)
【6.1】
#include <stdio.h>
void main()
{
int i = 8;
printf("i = %d\n",i++);
printf("i = %d\n",i--);
printf("i = %d\n",++i);
printf("i = %d",--i);
}
这里可以上述的运算法则来进行思考得出结果:
【6.2】
#include <stdio.h>
void main()
{
int i = 5,j = 5,p,q;
p = (i++)+(i++)+(i++);
q = (++j)+(++j)+(++j);
// printf("q=%d\n",q);
// q += ;
//printf("q=%d\n",q);
// q += (++j);
// printf("q=%d\n",q);
printf("%d,%d",p,q);
}
运行结果如下:
**注意:**其实跟我设想的有点不一样,我原以为q的值会是21,结果输出的是22,明天查书看个究竟。
赋值运算符:
简单赋值运算符:"=",由此连接的式子称为赋值表达式。其一般形式为:变量=表达式。
其功能是将计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此:
a=b=c=2;
可理解为:
a=(b=c=2)
类型转换:
如果赋值运算符两边的数据类型不同,系统将自动进行类型转换,即把右边的类型换成左边的类型。具体如下规定:
1)实型赋予整型,舍去小数部分
2)整型赋予实型,数值不变,但以浮点形式存放,即增加的小数部分为0
3)字符型赋予整型,由于字符型为1个字节,而整型为两个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0.整型赋予字符型,只把低八位赋予字符量。
来看一个具体的实例:
#include <stdio.h>
void main()
{
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a = y;
x = b;
a =c1;
c2=b;
printf("%d,%f,%d,%c\n",a,x,a,c2);
}
最后的运行结果如下:
起初我的判断是第一个a输出的结果为8.88后来一想,是等整个流程走完再进行输出.
复合的赋值运算符:
在赋值运算符之前加上其他二目运算符可构成符合赋值符.如:+=,-=,*=,/=.
例如:x+=2,等价于x=x+2
m*=n-1等价于m=m*(n-1)
r%=p等价于r=r%p
复合赋值符,十分有利于编译处理,能提高编译效率并产生较高质量的目标代码.
逗号运算符和逗号表达式
在C语言中,","也是一种运算符.其功能是将两个表达式连接起来组成一个表达式,称为逗号表达式.其一般形式为:
表达式1,表达式2
其求职过程分别是求两个表达式的值,并以表达式2的值作为整个逗号表达式的值.
例如:
#include <stdio.h>
void main()
{
int a = 2,b = 4, c = 6,x,y;
y = (x = a+b),(b+c);
printf(“y=%d,x=%d\n”,y,x);
}
输出结果如下:
关于嵌套的逗号表达式:
例如:
表达式1,(表达式2,表达式3)
先将括号里面的求出,值为表达式3,然后再与表达式1 进行运算,结果是表达式3.
其扩展形式为:
表达式1,表达式2,…,表达式n
整个逗号表达式的值等于表达式n的值
程序中使用逗号表达式通常是分别求逗号表达式内各表达式的值,并不一定要求逗号表达式的值.
注意 :
并不是所有出现都好的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符.
总结:
今天敲的几个程序最后的输出结果跟我预想中的有出入,但基本都解决了思想上的错误,然而关于++i的这个程序仍有疑惑,待明天查看C语言的书籍再来证实一下…最近睡得好晚,晚安