web-dev-qa-db-ja.com

〜ビット演算子(チルダ)の機能は何ですか

重複の可能性:
ここで〜演算子はどういう意味ですか?
PHP(またはおそらく他の言語)でのビット演算ではありません

PHPの~演算子について誰かに説明してもらえますか? NOT-operator であることはわかっていますが、なぜPHPは、次のステートメントを変数の負の値から1を引いた値に変換するのですか?

$a = 1; echo ~$a    // echo -2
$a = 2; echo ~$a    // echo -3
$a = 3; echo ~$a    // echo -4  
20
Michiel

これは、2の補数演算と呼ばれます。あなたはそれについて読むことができます より詳細はここにあります

オペレーター ~は(ブール否定ではなく)バイナリ否定演算子であり、そのため、オペランドのすべてのビットを逆にします。結果は、2の補数演算で負の数になります。

27
buc

それは少し賢明ではありません。

すべての1を0に変換し、すべての0を1に変換します。したがって、1は-2になります(バイナリ表現では0b111111111110)。

ドキュメントをご覧ください http://php.net/manual/en/language.operators.bitwise.php

3
akond

~数値のすべてのビットを反転します。 2の補数(google it)では、すべてのビットを反転してから1を加算することで、数学的な否定を実現できます。最初のステップのみを実行する場合(つまり、ビットを反転するだけ)、反数から1を引いた値が加算されます。

2
cHao