2

シフト演算バイナリ ビット演算に関する Python のドキュメントでは、引数は整数でなければならないと書かれていますが、以下の式はエラーなしで評価されますが、<<との結果は奇妙>>です。

&ブール引数を使用するときにドキュメントなどを探す必要がある追加の場所はありますか、または評価と結果についての適切な説明はありますか?

  • True & False: False (class 'bool')
  • 真 | False: True (クラス 'bool')
  • True ^ False: True (class 'bool')
  • ~ True: -2 (クラス 'int')
  • ~ False: -1 (クラス 'int')
  • True << True: 2 (クラス 'int')
  • 偽 >> 偽: 0 (クラス 'int')

コード:

# Python ver. 3.3.2

def tryout(s):
    print(s + ':', eval(s), type(eval(s)))

tryout('True & False')
tryout('True | False')
tryout('True ^ False')
tryout('~ True')
tryout('~ False')
tryout('True << True')
tryout('False >> False')
4

1 に答える 1

5

boolは のサブクラスなintので、整数です。特にTrueは のように動作し、 のよう1False動作し0ます。

再実装bool のみ&に注意してください|(^ソース: Objects/boolobject.cpython ソースのソース コード)。他のすべての操作では、メソッドintが使用されます [実際には継承されます]。したがって、結果はints であり、セマンティクスは整数のセマンティクスです。

<<andに関して>>は、式はieTrue << Trueと等価ですが、一方isは ieです。1 << 11 * 2 == 2False >> False0 >> 00 * 1 == 0

それらに対して算術演算を行うときは、python のTrueand Falseas1およびas と考える必要があります。0の再実装は&、セマンティクスではなく、戻り値の型に|のみ^ 影響 します。

于 2013-08-22T12:03:20.603 に答える