05月22, 2007

C++中的逻辑运算符&&和||

a&&(b=b+2,c=c+3)
cmp DWORD PTR _a$[ebp], 0
je SHORT $L221
mov eax, DWORD PTR _b$[ebp]
add eax, 2
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _c$[ebp]
add ecx, 3
mov DWORD PTR _c$[ebp], ecx
if(a){b=b+2;c=c+3;}
cmp DWORD PTR _a$[ebp], 0
je SHORT $L221 ;&&->je
mov eax, DWORD PTR _b$[ebp]
add eax, 2
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _c$[ebp]
add ecx, 3
mov DWORD PTR _c$[ebp], ecx
a||(b=b+2,c=c+3);
cmp DWORD PTR _a$[ebp], 0
jne SHORT $L221 ;||->jne
mov eax, DWORD PTR _b$[ebp]
add eax, 2
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _c$[ebp]
add ecx, 3
mov DWORD PTR _c$[ebp], ecx

&&,||最终会被翻译成je和jne跳转 完全等价于if语句,不过当逻辑表达式作为判断条件时

if(a&&b){}

会在后面加上test eax,eax作为jmp的依据

本文链接:http://aztack.wang/post/logic-op-in-cpp.html

-- EOF--

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。