算数运算符、算术表达式

算术运算符和算术表达式

运算符的优先级:

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语言的书籍再来证实一下…最近睡得好晚,晚安

发布了10 篇原创文章 · 获赞 1 · 访问量 1243

猜你喜欢

转载自blog.csdn.net/weixin_43671182/article/details/94592877
今日推荐