今天遇到的面试题,面试十个九个错 本帖最后由 vcshellcode 于 2013-10-14 11:49:39 编辑 $a = 1; $b = $a + $a + $a++; echo $b; //输出3 echo ""; $d = 1; $c = $d + $d++; echo $c; //输出3 ?> 大部分人答案: $b=5; //错的 $c=3; 这里有人知道为什么两个结果是一样的嘛 分享到: ------解决方案--------------------曾经出现过这样的帖子,当时我也有点纠结。在官方手册中,出现的“运算符的结合方向”是如何考虑的。------解决方案--------------------我不太了解C的运算方式。自己的解释是: $a = 1; $b = $a + $a + $a++;//PHP先计算了$a + $a(尽管$a++的优先级高),最后得到3 $d = 1; $c = $d + $d++ //PHP先计算了$d++,在计算$d + 不知道这样理解对不对。------解决方案-------------------- 引用: 我不太了解C的运算方式。自己的解释是: $a = 1; $b = $a + $a + $a++;//PHP先计算了$a + $a(尽管$a++的优先级高),最后得到3 $d = 1; $c = $d + $d++ //PHP先计算了$d++,在计算$d + 不知道这样理解对不对。 我觉得对的,其实加上括号就可以更明显的看出来优先级了。------解决方案-------------------- ($a + $a++); //由执行顺序 //1、$a++ //2、$a //再由 $a = 1; $b = $a++; echo($a.'-'.$b); //结果$a为2, $b为1 即($a++)结果为1; //所以$a + $a++ = 2+1 为3 //式1 $b = $a + ($a + ($a + ($a + $a++))); //执行顺序 //1、($a + $a++) //2、($a + ($a + $a++)) //...括号优先 //因为1先被执行,所以$a变量值被改变了,后面的顺序执行都会按改变的值计算 //结果:$b = 2 + (2 + (2 + (2 + 1))); //式2 $b = $a + $a + $a + ($a + $a++); //等同于$b = (($a + $a) + $a) + ($a + $a++); //执行顺序 //1、($a + $a) //2、($a + $a) + $a) //......括号优先,相同符号 不加括号顺序执行 //执行结果为$b = 1+1+1+($a + $a++) 即$b=3+(2+1) //最后 $b = $a+$a++;//等同 式1 $b = $a+$a+$a++;//等同 式2 登录后复制