C语言中的算术运算符和算术表达式 您所在的位置:网站首页 运算符有哪些优先级类型 C语言中的算术运算符和算术表达式

C语言中的算术运算符和算术表达式

2024-07-17 03:10| 来源: 网络整理| 查看: 265

C语言中的算术运算符和算术表达式

C语言中运算和表达式的数量很多,C语言正是因为丰富的运算符和表达式使其语言功能十分完善。C语言的运算符不仅具有不同的优先级,还有结核性。在表达式中,各运算表达量参与运算的先后要遵守运算符优先级别的规定,也要受运算符结合姓的制约,以便确定是自左向右还是自右向左进行运算。这种结合性,增加了C语言的复杂性。

一、C语言运算符简介

C语言的运算符可以分为以下几类:

1.算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++),自减(--),一共种;

2.关系运算符:用于比较运算。包括大于(>)、小于(=)、小于等于(>=、

int i=1,j=2,a,b;

a=(i++)+(i++)+(i++);

b=(++j)+(++j)+(++j);

printf("%d,%d,%d,%d",a,b,i,j);

}

这个程序中,对a=(i++)+(i++)+(i++)应理解为三个i相加,分别是1+2+3,故a值为6。然后i再自增1一次相当于加3故1的最后值为4。而对于b 的值则不然,b=(++j)+(++j)+(++j)应理解为j先自增1,再参与运算,3+4+5的和为12,j的最后值为5,b的值为12。

5.赋值运算符和赋值表达式

5.1赋值运算符

简单赋值运算符记为=。由=组建的式子称为赋值表达式。

 

简单赋值表达式格式:变量=表达式;

赋值表达式的作用就是将赋值号右边表达式的值赋给赋值号左边的对象。赋值表达式的类型为赋值号左边对象的类型,其结果值为赋值号左边对象被赋值后的值。

简单赋值表达式使用说明

 赋值运算符的功能具有单向性,即只能将表达式的值传送变量,反之则不然。

 赋值运算符左边只能是单个变量名,不能是其他运算量。

 赋值运算符右边可以是常量、变量、函数或表达式。

④ 赋值运算符兼有计算与赋值双重功能,它首先计算出赋值运算符右边表达式的值,然后把此值再赋给左侧的变量。

⑤ 赋值运算符具有右结合性。因此a=b=c=5可理解为a=(b=(c=5)),即表达式值为5,a,b,c均为5。这个表达式从右向左运算,在c被更新为5后,表达式c=5的值为5,接着b的值被更新为5,最后a被赋值为5。

⑥ 凡是表达式可以出现的地方均可出现赋值表达式。例如,式子x=(a=5)+(b=8)是合法的。其意义是把5赋给a,8赋给b,再把a与b相加,和赋给x,故x应等于13。

⑦ 赋值运算符的优先级低于算术运算符。

⑧ 按照C++语言规定,任何表达式在其末尾加上分号就构成语句,所以在赋值表达式末尾加分号就构成了赋值语句,在程序中大量使用。

赋值运算中的自动类型转换

如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值运算符右边的类型转换成左边的类型。具体规定如下。

(1) 实型赋给整型,舍去小数部分。

(2) 整型赋给实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。

(3) 字符型赋给整型,由于字符型为一个字节,故将字符的ASCII码值放到整型量的低八位中,高位为0。整型赋给字符型,只把低八位赋给字符量。

(4) 在赋值运算中,赋值运算符两边量的数据类型不同时,赋值运算符右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。

三、逗号运算符和逗号表达式

C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:

3+5,6+8

称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为

表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式

a=3*5,a*4

对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达式的值, 如果a的原值为3,则逗号表达式的值为12,将12赋给a, 因此最后a的值为12。另一种认为:“a=3*5”是一个赋值表达式,“a*4”是另一个表达式,二者用逗号相连,构成一个逗号表达式。这两者哪一个对呢?赋值运算符的优先级别高于逗号运算符, 因此应先求解a=3*5(也就是把“a=3*5”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。

一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。

逗号表达式的一般形式可以扩展为

表达式1,表达式2,表达式3……表达式n

它的值为表达式n的值。

逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

① x=(a=3,6*3)

② x=a=3,6*a

第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。

第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

其实,逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中。

请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如:

printf("%d,%d,%d",a,b,c);

上一行中的“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,参数间用逗号间隔。

如果改写为

printf("%d,%d,%d",(a,b,c),b,c);

则 (a,b,c)是一个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符而是逗号运算符。括弧中的内容是一个整体,作为printf函数的一个参数。C语言表达能力强,其中一个重要方面就在于它的表达式类型丰富,运算符功能强,因而c使用灵活,适应性强。

总结:

1 、 左移运算符左移一位相当于乘二,其效率比乘以2的效率高。左移其右边自动补零,右移其左边补符号位。

2 、 这些操作符的优先级顺序    ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。

https://blog.csdn.net/sardine_c/article/details/49563661



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有