C语言运算符优先级(内有例题可供参考) | 您所在的位置:网站首页 › c语言优先级顺序图片 › 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 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 实验室设备网 版权所有 |