C语言运算符及其优先级汇总表口诀
圆下箭头一顿号 非凡增减富强针地长 三乘除,四加减,五移位 千万别把鱼忘记,它在盛饭的厨子里 小灯大灯灯灯不等 爸喂鱼,舅疑惑,裸鸡也疑惑 十三姨,十四父,十五逗,兜到低 “圆下箭头一顿号”指的是第15级的运算符。其中圆指的是运算符(),下指的是下标运算符[],箭头指的是指向结构体成员运算符->,顿号指的是结构体成员运算符、 “非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是 负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof “三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算 符/,加减指的是加法运算符+和减法运算符-,移位指的是左移运算符<<和右移运算符>> “千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。 “小灯大灯灯灯不等” 指的是第10级到第9级的运算符。其中小灯大灯指的是关系运算符<、<=、>和>=,灯灯指的是等于运算符==,不等指的是不等于运算符!= “爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算 符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符|| “十三姨,十四父,十五逗,兜到低”指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,父指的是赋值运算符=、+=、 -=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是第1级的运算符,兜到低指的是15级运算符以,结束。 附录:C语言运算符及优先级 优先级 运算符 含义 运算符类型 结合方向 15 () 圆括号 单目 自左向右 [] 下标运算符 —> 指向结构体成员运算符 、 结构体成员运算符 14 ! 逻辑非运算符 自右向左 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算符 (类型) 类型转换运算符 * 指针运算符 & 地址运算符 Sizeof 长度运算符 13 * 乘法运算符 双目 自左向右 / 除法运算符 % 求余运算符 12 + 加法运算符 - 减法运算符 11 << 左移运算符 >> 右移运算符 10 <、<=、>、>= 关系运算符 9 == 等于运算符 != 不等于运算符 8 & 按位与运算符 7 ^ 按位异或运算符 6 | 按位或运算符 5 && 逻辑与运算符 4 || 逻辑或运算符 3 ?: 条件运算符 三目 自右向左 2 =、+=、-=、*=、 /=、%=、>>=、 <<=、&=、^=、|= 赋值运算符 双目 1 , 逗号运算符 双目 自左向右 ②括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等 等于(与)不等排第七; //即== != 位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与 //逻辑运算符:|| 和 && 十二和十一; //注意顺序:优先级(||) 底于 优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多! 逗号运算级最低! //逗号运算符优先级最低 由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的! ((*strDest++=*strSrc++)!='\0'); : 重点:++后增运算符优先级高于* 1.*strDest++相当于 *(strDest++) 2.由于是后自增,故执行顺序为: *strDest=*strSrc strDest++ strsrc++ //该级顺序不明 将*strDest与'\0'比较 //即,整个表达式的值为*strDest与'\0'的比较结果 值得注意的是,对于赋值表达式,表达式本身的值等于左边子表达式的值。 通过以上深入的分析,我们知道这个表达式完成了以下多个功能: 1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。 2.判断赋值后的strDest所指的内存空间的指是否等于0。 3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。 即:该表达式实现了以下三个功能: 1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。 2.判断赋值后的strDest所指的内存空间的值是否等于0。 3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。
http://c.biancheng.net/cpp/html/1386.html