我有这个代码:
$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 $awhich 为!$a假(转换为 0)
0 - 1 = -1
运算符!是逻辑非运算符