C语言运算符优先级(内有例题可供参考) 您所在的位置:网站首页 c语言优先级顺序图片 C语言运算符优先级(内有例题可供参考)

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

2024-07-06 14:44| 来源: 网络整理| 查看: 265

详细表: 优先级运算符及其运算符结合规律

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 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操作.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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