= 和 == 的优先级
有如下代码:
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君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039