短路求值
7. 请说明逻辑与(&&)在下边表达式中起到的重要作用(这道题很经典,不要轻易看答案(⊙o⊙)哦 )]<a{4,Kcount != 0 && sum/count
复制代码
答:该表达式使用逻辑与(&&)来确保 sum/count 的除数不为 0。
因为当 count 为 0 时,并不会导致 sum/0,因为根据短路求值的原则,&& 运算符在左侧为假的情况下,并不会计算右侧的表达式。(这个技巧放在实际开发中,逼格顿时嗷嗷的 )@
我的問題是 sum/count 不回執行嗎,因為除號優先級比較高,我想是不是有執行但是後來省略掉
本帖最后由 jhq999 于 2022-3-17 16:08 编辑
逻辑与 &&、逻辑或 || 均有“短路”特性:
逻辑与&&“短路”:当逻辑与&&的左操作数为逻辑假时,就足以判断该逻辑运算的结果为假了,故右操作数就不再被执行。
逻辑或||“短路”:当逻辑或||的左操作数为逻辑真时,就足以判断该逻辑运算的结果为真了,故右操作数就不再被执行。
000A1A6C 83 7D F8 00 cmp dword ptr ,0
000A1A70 74 12 je main+44h (0A1A84h);count=0就在这里短路了直接跳过下面的代码
000A1A72 8B 45 EC mov eax,dword ptr
000A1A75 99 cdq
000A1A76 F7 7D F8 idiv eax,dword ptr
000A1A79 85 C0 test eax,eax
000A1A7B 74 07 je main+44h (0A1A84h)
{ …执行的代码…};
000A1A84 ……
jhq999 发表于 2022-3-17 15:23
逻辑与 &&、逻辑或 || 均有“短路”特性:
逻辑与&&“短路”:当逻辑与&&的左操作数为逻辑假时,就足以判断 ...
所以優先級不用考慮嗎那課堂上說要先考慮優先級怎麼說呢 kazuya8375 发表于 2022-3-17 21:59
所以優先級不用考慮嗎那課堂上說要先考慮優先級怎麼說呢
我理解:
count != 0 && sum/count;
由优先级来说在这里&&最低,所以分成2个部分count != 0 和sum/count;
这时遵循短路原则,先算count != 0
页:
[1]