ここから始めてください: https://wiki.python.org/moin/BitwiseOperators
x << y
ビットを y だけ左にシフトして x を返します (右側の新しいビットはゼロです)。これは、x に 2**y を掛けることと同じです。
x >> y
ビットを右に y シフトした x を返します。これは、x を 2**y で // するのと同じです。
x & y
「ビットごとの and」を実行します。出力の各ビットは、y の x AND の対応するビットが 1 の場合は 1、それ以外の場合は 0 です。
x | y
「ビットごとの論理和」を実行します。出力の各ビットは、y の x AND の対応するビットが 0 の場合は 0、それ以外の場合は 1 です。
~ x
x の補数 (各 1 を 0 に、各 0 を 1 に置き換えることによって得られる数値) を返します。これは -x - 1 と同じです。
x ^ y
「ビットごとの排他的論理和」を実行します。出力の各ビットは、y のビットが 0 の場合は x の対応するビットと同じであり、y のビットが 1 の場合は x のビットの補数です。
ウィキペディアによると:
関数 NAND(a1, a2, ..., an) は、NOT(a1 AND a2 AND ... AND an) と論理的に同等です。
a
したがって、オペランドとb
Python でビット単位の NAND 演算を行うには、次のようにします。
~(a & b)
関数に入れることができます:
bnand = lambda a, b: ~(a & b)
対応する非ビット単位の NAND は次のようになります。
not (a and b)
and
したがって、 and &
(not
および and ~
);を混同しないように注意してください。また、論理演算子は小文字です。
PSまた、必ずこれを読んでください: Python: unsigned 32 bit ビット単位の算術演算