应该是什么结果!$ a - $ a

时间:2013-03-05 15:52:43

标签: php math

我有这段代码:

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

我在考虑!0 - 开玩笑,但输出为-1。不幸的是我无法理解为什么结果是-1。如果有人解释的话会很棒。

3 个答案:

答案 0 :(得分: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

我想现在应该清楚了!如果它仍然令人困惑,请告诉我。

答案 1 :(得分:3)

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

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

此处!$a =>由于减法,false也被投放到0

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

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

另请参阅:operator precedence

答案 2 :(得分:1)

$a是1

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

0 - 1 = -1

运算符!是逻辑非运算符