网上、书上都说,是&&运算符优先级大于||。 #include <stdio.h> int main() { int a = 1; int b = 1; int c = 1; ++a || ++b && ++c; printf("a = %d , b = %d, c = %d\n", a, b, c); return 0; } 咋分别是2、1、1。不应该是先加b和c么? 10: ++a || ++b && ++c; 0040103D mov eax,dword ptr [ebp-4] ; &a = [ebp - 4] 00401040 add eax,1 ; ++a 00401043 mov dword ptr [ebp-4],eax ; 把计算结果保存到a的地址 00401046 cmp dword ptr [ebp-4],0 ; 判断是否为0 0040104A jne main+54h (00401064) ; 不为0跳到printf结束 0040104C mov ecx,dword ptr [ebp-8] ; &b = [ebp - 8] 0040104F add ecx,1 ; ++b 00401052 mov dword ptr [ebp-8],ecx ; 保存结果 00401055 cmp dword ptr [ebp-8],0 ; 比较是否为0 00401059 je main+54h (00401064) ; 为0,则&&不成立,跳走 0040105B mov edx,dword ptr [ebp-0Ch] ; c,以此类推 0040105E add edx,1 ; ++c 00401061 mov dword ptr [ebp-0Ch],edx ; 保存结果 和++a || (++b && ++c)反汇编一样,实际都先算++a了。 |
|
VC6 、win2003
|
|
15分 |
对啊,|| 符号不是先执行左边 成功了 就不看右边么?
|
可是优先级高的不先算吗? |
|
25分 |
优先级高表示
++a || ++b && ++c 是 ++a || (++b && ++c) 而不是 (++a || ++b) && ++c 其次这些运算都是从左向右演算的。 举四则运算的例子: 就原问题而言,就||而言 其次就是||是短路的 |