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の補数演算で負の数になります。
それは少し賢明ではありません。
すべての1を0に変換し、すべての0を1に変換します。したがって、1は-2になります(バイナリ表現では0b111111111110)。
ドキュメントをご覧ください http://php.net/manual/en/language.operators.bitwise.php
~
数値のすべてのビットを反転します。 2の補数(google it)では、すべてのビットを反転してから1を加算することで、数学的な否定を実現できます。最初のステップのみを実行する場合(つまり、ビットを反転するだけ)、反数から1を引いた値が加算されます。