为什么 1...1 的计算结果为 10.1?

2022-08-30 06:36:46

我刚刚遇到了一个来自3v4l的PHP片段:https://3v4l.org/jmrZB

echo 1...1; //10.1

恐怕我不知道如何解释它的结果。为什么这被认为是有效的?


答案 1

点 () 在 PHP 中有两个角色:.

  1. 作为十进制数字,当它是实数的一部分时,例如.整数部分和小数部分在实数上都是可选的,但在同一时间不是。这意味着两者在PHP中都是有效的实数,但不是数字。1.11..1.
  2. 作为字符串串联运算符。此运算符将两个字符串子表达式连接到一个较大的表达式中。较大表达式的值是子表达式的字符串值的串联。非字符串的子表达式在串联之前将转换为字符串。
    例如: 与 相同,其值为 字符串 。1 . 1'1' . '1''11'

表达式被解析为 。根据上面所说的那些,并且是实数(和)和中间点()是字符串串联运算符。1...11. . .11..11.00.1.

将数字转换为字符串时,PHP 将使用此操作所需的最少字符数。如果实数只有整数部分,则它将数字表示为整数,没有小数点和小数点。

这就是为什么 与 相同,表达式的最终值为 。1. . .1'1' . '0.1'10.1

为什么以这种方式解析?1...1

分析器从左到右读取表达式。 告诉它一个数字从那里开始。 是有效的实数,但不是。它保持为一个数字,然后下一个点是串联运算符。下一个 ,后跟一个数字,是另一个实数 () 的开头。11.1..1...1

总而言之,与.1...11. . .1


答案 2

因为它被解释为( 和 ) 因此你得到1...110.110.1


推荐