根据操作码应该是12我弄错了吗
number of ops: 8
compiled vars: !0 = $x
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------
3 0 E > EXT_STMT
1 ASSIGN !0, 5
5 2 EXT_STMT
3 POST_INC ~2 !0
4 POST_INC ~3 !0
5 ADD ~4 ~2, ~3
6 ECHO ~4
7 7 > RETURN 1
branch: # 0; line: 3- 7; sop: 0; eop: 7; out1: -2
path #1: 0,
编辑
($x++)+($x++);返回相同的结果(11)。实际上这是问题和操作码调查的主要原因。
7条答案
按热度按时间ar7v8xwq1#
我读了几遍,但
$x=5; $x++ + $x++;
是这样工作的:在$x++的情况下,它首先“被使用”,然后增加:
$x=5;
-将$x设置为5$x++ + ...
-使用,然后递增++
)($x现在是6,stack=[5])... + $x++;
-使用,然后递增++
)(不再使用,但$x现在是7)实际上,在这个特定的例子中,如果你使用
echo $x;
,它会输出7。你从来没有把值重新分配回$x,所以$x=7(你递增了两次);bprjcwpo2#
**表达式行将像这样执行:**语句中第一次出现
$x++
将使$x
值增加1,因此它将变为6,并且在第二次出现时,
$x
将具有值6;所以$a = 5 + 6;
所以最终结果
$a
将是11。ef1yzkbh3#
的优先级高于+运算符
(x)将首先返回x的值,然后将其递增1
x+x的计算方式如下
($x++)+($x++)
也是如此grouping operator ()
具有left to right
关联性。首先($x++)
首先执行。然后last($x++)执行。它返回6,然后将$x递增到7
因此返回相同的
5+6 // 11
9q78igpj4#
后递增运算符递增变量,但返回其旧值。
所以
$x++
等价于:当你在一个表达式中做两次时,就像:
第一部分设置
$temp1 = 5
并将$x
递增到6
。第二部分设置
$temp2 = 6
并将$x
递增到7。然后执行
$temp1 + $temp2
并回显结果5 + 6 = 11
。up9lanfz5#
您正在使用后递增运算符($x++)。如果您想使用递增值进行加法,则应使用前递增运算符(++$x)。
如果$x = 5
然而在所有情况下,x在之后都等于7。
6qfn3psc6#
打印11,因为第一个$x返回5,然后它递增,第二个$x返回6,唯一的值递增。
jpfvwuh47#
$x + $x将是12
而++$x + $x将是13
当你使用$x $x时,只要它的值是use,就会得到+1,但是将要使用的值是它在递增之前的值,所以当你这样做时:
$x=5; $x+++$x++;
$x+++$x++是11,但$x将是7