1. ホーム
  2. operators

[解決済み】ビット単位の補数演算子(~チルダ)はどのように機能しますか?

2022-04-19 04:16:43

質問

なぜ ~2 は -3 になるのか? どのようにして ~ 演算子はどのような働きをするのですか?

どのように解決するのですか?

負の数は 2の補数 の正の対応するものです。例えば、-2を2の補数で表すと、次のようになります。(8ビット)

1111 1110

これは、ある数を2進法で表現し、その補数(すべてのビットを反転させる)をとり、1を足すことで得られるものです。2は0000 0010で始まり、ビットを反転させると1111 1101となります。1を足すと上のようになります。最初のビットは符号ビットで、マイナスを意味する。

では、「~2=-3」がどのようにして得られるのかを見てみましょう。

ここで再び2。

0000 0010

単純にすべてのビットを反転させると、こうなる。

1111 1101

では、-3は2の補数ではどうなるのでしょうか。正の3である0000 0011から始めて、すべてのビットを1111 1100に反転させ、1を加えて負の値(-3)である1111 1101とします。

つまり、2のビットを単純に反転させれば、-3の2の補数表現が得られるというわけだ。

補数演算子(~)はビットをはじくだけです。このビットをどう解釈するかは機械次第です。