~
誰かが PHPの演算子について説明してくれますか? 私はそれがNOT-operatorであることを知っていますが、PHP が次のステートメントを変数の負の値から 1 を引いた値に変換するのはなぜですか?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
~
誰かが PHPの演算子について説明してくれますか? 私はそれがNOT-operatorであることを知っていますが、PHP が次のステートメントを変数の負の値から 1 を引いた値に変換するのはなぜですか?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
これは、2の補数演算と呼ばれます。あなたはそれについてもっと詳細にここで読むことができます。
演算子~
は(ブール否定ではなく)バイナリ否定演算子であり、そのため、オペランドのすべてのビットが逆になります。結果は、2の補数演算で負の数になります。
これはビット単位の NOT です。
すべての 1 を 0 に、すべての 0 を 1 に変換します。したがって、1 は -2 になります (バイナリ表現では 0b111111111110)。
ドキュメント http://php.net/manual/en/language.operators.bitwise.phpをご覧ください
~
数値のすべてのビットを反転します。2の補数(google it)では、すべてのビットを反転してから1を加算することで、数学的な否定を実現できます。最初のステップのみを実行する場合(つまり、ビットを反転するだけ)、加法逆数から1を引いた値になります。