私はこのコードを持っています:
$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
、これ!$a
は偽です (これは 0 に変換されます)
0 - 1 = -1
演算子!
は論理否定演算子です