C语言运算符优先级顺口溜[转]
(2012-12-24 11:59:50)
标签:
c优先级顺口溜it |
分类: C |
C语言运算符优先级顺口溜
醋坛酸味灌
味落跳福豆
共44个运算符
醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员
坛-单目,9个: ! ~ ++ -- -负号 (类型)
酸-算术,5个: * / % + -减
味-位移,2个: << >>
灌-关系,6个: < <= > >= ==
等于 != 不等于
味-位逻,3个: & 按位与 ^ 按位异或 |
按位或
落-逻辑,2个: && 逻辑与 || 逻辑或
跳-条件,1个,三目: ?
:
福-赋值,11个: = += -= *= /= %= >>= <<= &= ^=
|=
豆-逗号,1个: ,
结合方向自右向左的只有三类:赋值、单目和三目,其它的都是从左至右结合。
注意:自己今天写程序时候把关系运算符号和位逻辑的优先级弄反。尽量用括号,就不出问题。
如:if(P1OUT&BIT0==0)P1OUT
^=BIT0;
这行程序是错误的。可两边加上括号,即if((P1OUT&BIT0)==0),或是直接用:P1OUT|=BIT0;
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的
真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
移位运算符紧随其后。
其次的关系运算符中,< <= > >=要比 == !=高一个级别,不大好理解。
所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)
逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算符,赋值运算符及逗号运算符。
在C语言中,只有4个运算符规定了运算方向,它们是&&、|
|、条件运算符及赋值运算符。
&&、|
|都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 &&
b; &&运算符的左边位0,则右边表达式b就不再判断。
在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。
赋值表达式则规定先对右边的表达式求值,因此使 a = b = c = 6;成为可能。
非凡增减富强针地长
三乘除,四加减,五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼,舅疑惑,裸鸡也疑惑
十三姨,十四父,十五逗,兜到低
“圆下箭头一顿号”指的是第15级的运算符。
正在装载数据…… |
“非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof
“三乘除,四加减,五移位”
“千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。
“小灯大灯灯灯不等”
“爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符||
“十三姨,十四父,十五逗,兜到低”指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?:
附录:C语言运算符及优先级
优先级
15
14