表达式与求值

C语言中,表达式由运算符、常量及变量构成。每一个表达式,都有对应的一个值。该值与表达式中操作符的优先级和结合律有关。大家已经学习了运算符的概念,那么在本章将进一步学习各种不同的表达式。

赋值表达式,比如对于整数变量:

a = 0

就是一个赋值表达式,表达式的值就是a的值。

算术表达式:

a + b

a*b

a/b

a%b

 

逗号表达式:

a,b,c,d

逗号表达式是用逗号运算符将表达式连接在一起形成新的表达式。逗号表达式的格式为:

表达式1,表达式2,表达式n

逗号表达式的计算顺序是从左往右,逗号表达式最终的值是表达式n的值,即表达式最右边的值为逗号表达式的值。

在计算逗号表达式的值的时候,一定要注意,逗号运算符的优先级是最低的运算符,所以逗号运算符是最后参加运算的。比如考虑如下程序的输出是什么呢?

int main(void)

{

int a,b,c;

a=b=1;

c=a++,b++,++b;

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

return 0;

}

首先,由于逗号运算符的优先级最低,所以也就低于赋值运算符,所以表达式:

c=a++,b++,++b

等价于:

(c=a++),b++,++b

等价于:

(c=a; a++),b++,++b

其结果为:

c=1, a=2, b= 3

所以输出应该是:2,3,1。而整个逗号表达式的值为3

int main()

{

       int a=2,b=4,c=6,x,y,z;

       z=(y=(x=a+b),(b+c));

       printf("y=%d,x=%d,z=%d",y,x,z);

    return 0;

}

 

由于赋值运算符优先级高于逗号运算符,所以,应该先算x=a+b,即x=6,再算y=(x=6),即y也等于6,再算b+c,即10,所以z=(6,10),所以,z=10。于是输出为:y=6,x=6,z=10

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

printf("%d  %d  %d"abc)

func(a, b,c);

 

逻辑表达式:

a&&b&&c

a||b||c

 

比较表达式:

a>b

a==b

a!=b

 

复合表达式:

a+5*b+(c>>2)

 

a==NULL

a==true

a==false

a==0

实数与零进行比较:

浮点运算是不精确的,运算结果本该等0的地方,有可能实际算出是0.0000001,所以,一般只要小于某个数,就认为等于0了。

 

float a;

if (a>-1e-6 && a<1e-6)

{

}

if (a == 0.0)

{

}

在实数中,用1e-6表示0。所以实数与零比较用下面的表达式:

 

fabs(a) == 1e-6

fabs(a) != 1e-6

fabs(a) > 1e-6

fabs(a) < 1e-6

其中fabs()是求实数的绝对值的库函数,它的头文件为“math.h”。

三元表达式求值

三元运算符A?B:C,在计算的时候,先计算A部分的值,如果A部分位真,就计算B部分的值作为整个表达式的值,否则计算C部分表达式的值,作为整个表达式的值。

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注