1

我有这个代码:

$a = 1;
$a = !$a - $a;
echo $a;

我在想!0- 开玩笑,但输出是-1. 不幸的是,我不明白为什么结果是-1. 如果有人解释,那就太好了。

4

3 回答 3

10

如果你这样做var_dump(!$a);,你会发现它!$a不再是整数了。这是一个boolean false,并不是因为它1在你的情况下的原始价值。看看这个:

$a = 5;
$a = !$a - $a; 
echo $a;    // output: -5

您可能也有兴趣执行以下操作:

$a = 5;
$a = false - $a;
echo $a;     // output: -5

所以,正如你所看到的,!$a意思是false它翻译成0. 所以,根据你的例子,我们有这样的事情:

$a = 1;
$a = !$a - $a;

这相当于:

$a = 0 - 1;

这是-1

此外,true还翻译为1。你想确定吗?试试看:

$a = 5;
$a = true - $a;
echo $a;    // output: -4

我想现在应该足够清楚了!让我知道它是否仍然令人困惑。

于 2013-03-05T15:54:07.637 回答
3

这是因为一元 NOT在减法之前被评估,即它的评估如下:

$a = (!$a) - $a;

在这里,!$a=>也因为减法而被强制false转换。0

为了得到你所期望的,你应该加上括号:

$a = !($a - $a);

另请参阅:运算符优先级

于 2013-03-05T16:02:59.887 回答
1

$a是 1

因此NOT $awhich 为!$a假(转换为 0)

0 - 1 = -1

运算符!是逻辑非运算符

于 2013-03-05T15:55:07.970 回答