C语言运算符优先级(内有例题可供参考)

详细表:

优先级运算符及其运算符结合规律

1

[ ] , () ,.(结构体访问成员点方式) ,->(结构体访问成员箭头方式) ,后缀++ ,后缀--从左向右 
2前缀++ 前缀-- sizeof *(指针解引用) &(取地址) ^ 正负号 减量 增量 ~(按位否定) !从右向左
3强制类型转换从右向左
4*(乘)  /(除)  %(取余)  从左向右 
5+ - (算术加减)从左向右 
6<<  >> (位移位)从左向右 
7<   <=   >=   > (小于 小于等于 大于等于 大于)从左向右 
8==    !=从左向右 
9& (按位与)从左向右 
10^ (按位异或)从左向右 
11

| (按位或)

从左向右 
12&& (逻辑与)从左向右 
13|| (逻辑或)从左向右 
14? :(三目运算 如:a?1:0)从左向右 
15=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=  (与赋值号相关的)从右向左
16,   (逗号运算符)从右向左

粗略记忆 :

优先级排序为:

!(非)                                高

算术运算符

关系运算符

&& 和 ||   (与 > 或)

赋值运算符                             低


关于“优先级”的题目举例:

例题1:

main(){

int x,a=1,b=2,c=0;
x= --a||b&&++c;
printf("%d",x);
}

结果为

从上面我们可以分析:

        由于    优先级  &&>|| , 所以   x= --a||b&&++c;  等价于    x= --a ||(b&&++c);

        由于   括号优先级高,先计算右边, b&&++c

                ++c的 算术运算优先级高,所以  先计算++c,  然后  2&&1    值为真(就是1)

        之后计算  --a|| 1  

                因为(算术运算符> || ) 左侧先计算  --a ,之后 0||1   得出最终答案 1.

例题2:

若a是int类型变量,表达式(a=5*5,a*2),a+6的  值是()多少?                答案是26

代码如下:

#include<stdio.h>
int main(){
	int x,y,a;
	x=((a=4*5,a*2),a+6);
	y=(a=4*5,a*2),a+6;
	printf("%d\t%d",x,y);
	return 0;
} 

结果为:

补充:

逗号运算符(可以看一下这里)

我们可以先把上面两个表达式简化成👇

例一:o = 表达式1,表达式2,表达式3;

因为逗号表达式是优先级最低的表达式,赋值表达式的优先级高,所以会把表达式1的值直接赋值给o

例二:o = (表达式1,表达式2,表达式3);

括号里中的先执行,逗号表达式是左结合性,所以会从左往右依次执行,最后再把表达式3的值赋值给o

之后,分析可得 (a=4*5,a*2),a+6 

              先计算a=4*5   使得a=20

              再计算,a*2,(此时a=20)   =40

                        所以(a=4*5,a*2) 整体的值  等于  40

              再计算右侧a+6  =26

              所以最终结果为  26。

PS:至于为什么y=40是因为逗号表达式 优先级 低于 赋值语句“=”,所以提前执行了 y=40操作.

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值