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

まあ$a1です

したがってNOT $a、これ!$aは偽です (これは 0 に変換されます)

0 - 1 = -1

演算子!は論理否定演算子です

于 2013-03-05T15:55:07.970 に答える