1. ホーム
  2. python

[解決済み] なぜ ~True は -2 になるのですか?

2022-06-05 04:29:37

質問

Pythonのコンソールで。

~True

与える。

-2

なぜですか?どなたかこの特殊なケースをバイナリで説明していただけませんか?

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

int(True)1 .

1

00000001

~1

11111110

どれが -2 2の補数 1

1 すべてのビットを反転させ、結果の数値に1を加え、その結果を 2進表現 として解釈し、負の符号を追加します (数値が 1 で始まるため)。

11111110 → 00000001 → 00000010 
         ↑          ↑ 
       Flip       Add 1

というのは2ですが、符号がマイナスになっているのは MSB は1なので、符号は負になります。


言及する価値がある。

について考える bool について考えてみると、これは数値的な性質を持っていることがわかります。 TrueFalse で、これらは整数の1と0をカスタマイズしたもので、印字方法だけが異なります。これらは サブクラス のサブクラスで、整数型 int .

つまり、これらは1や0と全く同じ振る舞いをしますが、例外として bool は再定義します。 strrepr を使えば、それぞれ異なる表示ができます。

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

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