今天遇到的面试题,面试十个九个错
本帖最后由 vcshellcode 于 2013-10-14 11:49:39 编辑 php
$a = 1;
$b = $a + $a + $a++;
echo $b; //输出3
echo "
";
$d = 1;
$c = $d + $d++;
echo $c; //输出3
?>
大部分人答案:
$b=5; //错的
$c=3;
这里有人知道为什么两个结果是一样的嘛
$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 + 不知道这样理解对不对。
------解决方案--------------------
我觉得对的,其实加上括号就可以更明显的看出来优先级了。
------解决方案--------------------
<br><br>($a + $a++);<br>//由执行顺序<br>//1、$a++<br>//2、$a<br><br>//再由<br>$a = 1;<br>$b = $a++;<br>echo($a.'-'.$b);<br>//结果$a为2, $b为1 即($a++)结果为1;<br>//所以$a + $a++ = 2+1 为3<br><br><br>//式1<br>$b = $a + ($a + ($a + ($a + $a++)));<br>//执行顺序<br>//1、($a + $a++) <br>//2、($a + ($a + $a++))<br>//...括号优先<br>//因为1先被执行,所以$a变量值被改变了,后面的顺序执行都会按改变的值计算<br>//结果:$b = 2 + (2 + (2 + (2 + 1)));<br><br>//式2<br>$b = $a + $a + $a + ($a + $a++);<br>//等同于$b = (($a + $a) + $a) + ($a + $a++);<br>//执行顺序<br>//1、($a + $a)<br>//2、($a + $a) + $a)<br>//......括号优先,相同符号 不加括号顺序执行<br>//执行结果为$b = 1+1+1+($a + $a++) 即$b=3+(2+1)<br><br><br>//最后<br>$b = $a+$a++;//等同 式1<br>$b = $a+$a+$a++;//等同 式2<br><br>









