なぜ ~True の結果は -2 になるのでしょうか? 質問する

なぜ ~True の結果は -2 になるのでしょうか? 質問する

Python コンソールの場合:

~True

以下が得られます:

-2

なぜですか? 誰かこの特定のケースをバイナリで説明できますか?

ベストアンサー1

int(True)1

1は:

00000001

そして~1

11111110

-2それは2の補数1

1すべてのビットを反転し、結果の数値に1を加えて、結果をバイナリ表現大きさの負の符号を追加します(数値は 1 から始まるため)。

11111110 → 00000001 → 00000010 
         ↑          ↑ 
       Flip       Add 1

これは2ですが、符号は負です。MSB1です。


言及する価値がある:

について考えてみるとbool、それが本質的に数値であることがわかります。 と の2つの値があり、TrueそれらFalseは単に整数1と0の「カスタマイズされた」バージョンであり、印刷方法が異なります。サブクラス整数型のint

boolしたがって、 とが再定義されstrrepr異なる表示になることを除けば、それらは 1 と 0 とまったく同じように動作します。

>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True

>>> True == 1
True
>>> True is 1  # they're still different objects
False

おすすめ記事