我有这个代码:
$a = 1;
$a = !$a - $a;
echo $a;
我在想!0
- 开玩笑,但输出是-1
. 不幸的是,我不明白为什么结果是-1
. 如果有人解释,那就太好了。
如果你这样做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
我想现在应该足够清楚了!让我知道它是否仍然令人困惑。
这是因为一元 NOT在减法之前被评估,即它的评估如下:
$a = (!$a) - $a;
在这里,!$a
=>也因为减法而被强制false
转换。0
为了得到你所期望的,你应该加上括号:
$a = !($a - $a);
另请参阅:运算符优先级
嗯$a
是 1
因此NOT $a
which 为!$a
假(转换为 0)
0 - 1 = -1
运算符!
是逻辑非运算符