c语言中 运算优先级,c语言中运算符的优先级

最近看了本叫《C陷阱与缺陷》(C traps and pitfalls)的书。

书中对运算符的优先级讲的很清楚:为了便于复习,今天就回忆一下了:

当然至高无上的是(),

最高优先级的是: (),[] , . , ->,

(它们分别是函数符号,数组下标符号,成员符号) ,               结合性从左往右;

其次,单目运算符:  !,~,  ++, --, - (type)  *, &, sizeof   结合性从右往左;

再次,算术运算法:  * 、/、%                                  结合性从左往右;

再次:    +、-                                                结合性从左往右;

再次,移位运算符: <>, >>>结合性从左往右;

再次, 比较运算符: , >=                               结合性从左往右;

再次:              ==, !=                                   结合性从左往右;

再次, 逻辑运算符:

首先,按位运算符: &, ^, | ,  且&优先于^ ,^优于 |    结合性从左往右;

其次,逻辑运算符  &&, ||,  且&&优于||。             结合性从左往右;

接着是, 三目运算符:? :                                      结合性从右往左;

其次是, 赋值运算符: =                                       结合性从右往左;

最后是,逗号运算符: ,                                        结合性从左往右;

总结:要记住:

1.比较运算符优于逻辑运算符

2.移位运算符介于算术运算符和比较运算符之间

3.除单目运算符外,算术运算符的优先级最高。

下面看一个关于++,--的有趣的小例子:

#include

int main(void) {

int a;

int b =3;

int c = 4;

a = --b + b++ + c + b--; // ++等单目运算符的结合性是从右往左,等式等价于a = --b + (b++) + c + b--;

printf("%d/n", a);// a = 2 + 2 + 4 + 2; //前置运算是在等式的所有的计算前计算,后置计算是在等式的所有的计算完之后计算;

b = 3;

c = 4;

a = --b + b + (++c) + b--; //a=11 = 2 + 2 +5 + 2;

printf("%d/n", a);

b = 3;

c = 4;

a = --b + (b++) + c + b--; // a = 2 + 2 + 4 + 2;

printf("%d/n", a); //a=10

return 0;

}

从上面可以看出:   前置的++,--是在整个等式运算之前计算,而后置的++,--是在整个等式计算之后运算。

看看下面的代码是不是很明了:

void strcpy(char* dest, const char* src){

int i = 0;

while( (dest[i++]=src[i++]) != '/0');

}

void strcpy(char* dest, const char* src){

int i = 0;

while( dest[i++]=src[i++] );

}

void strcpy(char* dest, const char* src){

while( *(dest++) = *(src++) );

}

void strcpy(char* dest, const char* src){

while(*dest++=*src++);

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值