相信最初学C语言的朋友大都背过它的运算符优先级,我当时是背的没有忘的快;
后来就不太在意了,因为写代码时不确定的就通过括号来保证,这也是一些编程规范里提倡的,
但有时当读别人代码时你就又可能存在某些不确定的地方了,直到最近我发现了一个口决,真的很好,
可以很快就把所有优先级顺序都轻松记住。
口决如下 :
圆下箭头一顿号
非凡增减富强星地长(chang)
三乘除、四加减、五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼、舅疑惑、裸鸡也疑惑
十三姨、十四父、十五逗、兜到底
解析:
“圆下箭头一顿号”,圆指运算符(),下指下标运算符[],箭头指的是指向结构体成员运算符->,顿号也是结构体成员运算符.
“非凡增减富强星地长”,非指逻辑运算符!,凡指按位取反运算符~,增减指的是自增自减运算符,++,--,富指的是负号运算符-,
强指的是强制类型转换运算符(type),星指的是指针运算符*,地指的是地址运算符&,长指的是求长度运算符sizeof
“三乘除、四加减、五移位”,三四五指的是运算符的优先级,并无实际意义,只是区分级别用。乘除、加减、移位分别代表算术运算符*/ + - << >>
“千万别把鱼忘记,它在盛饭的厨子里”,指求余运算符,它在乘除运算符那一级别
“小灯大灯灯灯不等” 指关系运算符 < <= > >=; == !=
“爸喂鱼、舅疑惑、裸鸡也疑惑”分别指按位与 &,按位异或 ^,另外还有再低一级的运算符按位或| ,裸鸡也疑惑指逻辑运算符 逻辑与 && 逻辑或||
“十三姨、十四父、十五逗、兜到底”,姨指条件运算符 ?: (三有双重含义,它的优先级是十三,并且它是三目运算符,难道不姨即疑惑吗),
十四父指的是赋值运算符 = += -= *=/= %= &= ^= |= <<= >>=
十五逗指逗号运算符,兜到底,OK结束。
附运算符表 :
关联运算符 () []-> .
一元运算符 ! ~ ++ -- + - * & (type) sizeof 自右向左
乘法和除法 * / %
加法和减法 + -
移位运算符 << >>
关系运算符 < <= > >=
“相等”比较 == !=
位运算符 &
位运算符 ^
位运算符 |
逻辑运算符 &&
逻辑运算符 ||
条件运算符 ? :
赋值运算符 = += -= *= /= %= &= ^= |= <<=>>=
逗号运算符 ,