= 和 == 的优先级
有如下代码:
int a = 9; int b = 3; if(a = b == a) printf("??n");
这里出现了=和==两个运算符,该先结合哪一个呢?
如果不能上网,且身边没有参考书,那么可以查看汇编代码来探究下=和==的优先级。
;19: int a = 9; mov dword ptr [ebp-0Ch],9 ;20: int b = 3; mov dword ptr [ebp-10h],3 ;21: if(a = b == a) mov eax,dword ptr [ebp-10h] ; b -> eax xor ecx,ecx ; 0 -> ecx cmp eax,dword ptr [ebp-0Ch] ; cmp b, a sete cl ; ?? mov dword ptr [ebp-0Ch],ecx cmp dword ptr [ebp-0Ch],0 je main+47h .....
可看到,cmp指令的操作数实际上是b和a的值,说明先结合了==运算符。
sete/setz 的意思:set if equal / set if zero。
sete cl 的意思:若zf为1,则cl为1,否则为0,即根据zf来设置cl的值。
sete cl 在这里的作用就是保存b == a的布尔值。
由于之前已经通过xor指令将ecx设为0,所以ecx和cl的值相等,要么为0,要么为1,也是一个布尔值。
接着,mov dword ptr [ebp-0Ch],ecx 将这个布尔结果赋给a,即a = (b == a)。
可见==的优先级大于=的优先级。
我们经常会看到 while((c = getchar()) != 'n') 这类语句。其中把c=getchar()括起来,是因为=的优先级比==和!=的优先级低(==和!=处于同一个优先级),要保证先完成赋值再进行比较。
否则,表达式就变成了c = (getchar() != 'n')。
转载于:https://www.cnblogs.com/rdt2017/p/7063345.html
相关知识
freertos中的configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
一种针对花园灌溉系统的自动化测试方法
如何修改hexo中主题的css
c语言中%运算符的运算对象,C语言中运算对象必须是整型的运算符是()。A.%=B./C.=D.......
单片机设计基于STM32的盆栽培育系统
客户的订单多如何管理
如何在 FlowUs、Notion 等笔记软件中使用矩阵分析法建立你的思维脚手架
如何搞好水资源管理项目
第三章 处理机调度与死锁(1)
本来就没什么钱,还不算着花怎么行:个人记账中的预算规划
原文链接: = 和 == 的优先级 https://www.huajiangbk.com/newsview746322.html
| 上一篇: java多条件判断 | 下一篇: 决策树完成鸢尾花分类 |
推荐分享

- 1明日花キララ:明日花绮罗年度... 22927
- 2明日花キララ(明日花绮罗)经... 13441
- 3家庭养花知识大全 家庭养花有... 8814
- 4兰花叶子扭的是什么兰 8672
- 5家庭养花风水知识 家庭养花“... 8532
- 6君子兰什么品种最名贵 十大名... 7901
- 7十大致癌花卉排行榜,哪些花卉... 7598
- 8五月天婷婷开心六月丁香:音乐... 7420
- 9秋天养花,掌握这5点养花知识... 7114
- 10李晓明工笔牡丹(魏紫)《牡丹... 6761




