为什么$x=5; $x+++$x++;PHP中的11?

qlfbtfca  于 2023-04-04  发布在  PHP
关注(0)|答案(7)|浏览(118)

根据操作码应该是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)。实际上这是问题和操作码调查的主要原因。

ar7v8xwq

ar7v8xwq1#

我读了几遍,但$x=5; $x++ + $x++;是这样工作的:
在$x++的情况下,它首先“被使用”,然后增加:

  • $x=5;-将$x设置为5
  • $x++ + ...-使用,然后递增
  • 将$x放在公式堆栈上(即5)
  • 增量(++)($x现在是6,stack=[5])
  • ... + $x++;-使用,然后递增
  • 将$x添加到stack(stack=[5,6],所以5+6 -〉$x=11)
  • 加法完成,结果是11
  • 增量$x(++)(不再使用,但$x现在是7)

实际上,在这个特定的例子中,如果你使用echo $x;,它会输出7。你从来没有把值重新分配回$x,所以$x=7(你递增了两次);

bprjcwpo

bprjcwpo2#

$x = 5;
$a = $x++ + $x++;

**表达式行将像这样执行:**语句中第一次出现$x++将使$x值增加1,因此它将变为6,并且

在第二次出现时,$x将具有值6;
所以$a = 5 + 6;
所以最终结果$a将是11。

ef1yzkbh

ef1yzkbh3#

的优先级高于+运算符
(x
)将首先返回x的值,然后将其递增1

$x = 2
$x++ // return 2, then increment it to 3

x+x的计算方式如下

1. Get x value first which is 5
2. Then it will be incremented to 6
3. But first x value will be 5 because (x++) statement will return 5 first then increment the value
4. Then + operator is encountered
5. Next x will have 6 as value not 7 for the same reason (x++) will return the x value first and then increment it
6. So 5+6 is 11
7..At the end, x value will be 7

($x++)+($x++)也是如此

grouping operator ()具有left to right关联性。首先($x++)首先执行。

$x = 5
($x++) returns 5 and then increment $x by 1. Same as before.

然后last($x++)执行。它返回6,然后将$x递增到7
因此返回相同的5+6 // 11

9q78igpj

9q78igpj4#

后递增运算符递增变量,但返回其旧值。
所以$x++等价于:

($temp = $x, $x = $x + 1, $temp)

当你在一个表达式中做两次时,就像:

echo ($temp1 = $x, $x = $x + 1, $temp1) + ($temp2 = $x, $x = $x + 1, $temp2);

第一部分设置$temp1 = 5并将$x递增到6
第二部分设置$temp2 = 6并将$x递增到7。
然后执行$temp1 + $temp2并回显结果5 + 6 = 11

up9lanfz

up9lanfz5#

您正在使用后递增运算符($x++)。如果您想使用递增值进行加法,则应使用前递增运算符(++$x)。
如果$x = 5

$x++ + $x++ equals 5+6 = 11
++$x + $x++ equals 6+6 = 12
$x++ + ++$x equals 5+7 = 12
$++x + ++$x equals 6+7 = 13

然而在所有情况下,x在之后都等于7。

6qfn3psc

6qfn3psc6#

$x = 5;
echo $x++ + $x++;

打印11,因为第一个$x返回5,然后它递增,第二个$x返回6,唯一的值递增。

jpfvwuh4

jpfvwuh47#

$x + $x将是12
而++$x + $x将是13
当你使用$x
$x时,只要它的值是use,就会得到+1,但是将要使用的值是它在递增之前的值,所以当你这样做时:
$x=5; $x+++$x++;
$x+++$x++是11,但$x将是7

相关问题