logo

Python のビット演算子

オペレーター 値と変数に対する演算を実行するために使用されます。これらは、算術および論理計算を実行する特殊なシンボルです。演算子が演算する値はオペランドと呼ばれます。

Python のビット演算子

Python のビットごとの演算子は、整数のビットごとの計算を実行するために使用されます。まず整数がバイナリに変換され、次に各ビットまたは対応するビットのペアに対して演算が実行されるため、ビットごとの演算子と呼ばれます。結果は 10 進形式で返されます。



注記: Python のビット演算子は整数に対してのみ機能します。


オペレーター名前説明構文

ビット単位の AND 演算子



&ビットごとの AND両方のオペランド ビットが 1 の場合、結果ビット 1。それ以外の場合はビット 0 が返されます。xとy

ビット単位の OR 演算子

蜂の巣とは何ですか
|ビットごとの ORいずれかのオペランド ビットが 1 の場合、結果ビット 1。それ以外の場合はビット 0 が返されます。× |そして

ビットごとの XOR 演算子

^ビットごとの XORオペランド ビットのいずれかが 1 で両方が 1 でない場合は結果ビット 1、それ以外の場合はビット 0 になります。x^y

ビット単位の NOT 演算子



ビットごとの NOT

個々のビットを反転します。

~x

Python のビット単位の右シフト

sdlc
>>ビット単位の右シフト

左オペランドの値がビット数だけ右に移動されます

右オペランドで指定します。

×>>

Python のビット単位の左シフト

<<ビット単位の左シフト

左オペランドの値がビット数だけ左に移動します

右オペランドで指定します。

×<<

各演算子を 1 つずつ理解しましょう。

ビット単位の AND 演算子

Python のビットごとの AND (&) 演算子は 2 つの等しい長さのビット パターンをパラメータとして受け取ります。 2 ビット整数が比較されます。ビット パターンの比較された位置のビットが 1 の場合、結果のビットは 1 になります。そうでない場合、ビットは 0 になります。

例: 2 つのビット値 X と Y を取得します。ここで、X = 7= (111)2Y = 4 = (100)2。 X と y の両方のビット単位の and を取得します

一般保護違反

注記: ここで、(111)22進数を表します。

パイソン
a = 10 b = 4 # Print bitwise AND operation print('a & b =', a & b)>

出力

a & b = 0>

ビット単位の OR 演算子

Python のビットごとの OR (|) 演算子は、2 つの等価な長さのビット設計を境界として受け取ります。注目位置の 2 ビットが 0 の場合、次のビットは 0 です。そうでない場合は 1 です。

例: 2 つのビット値 X と Y を取得します。ここで、X = 7= (111)2Y = 4 = (100)2。 X、Y の両方のビット単位の OR を計算します

パイソン
a = 10 b = 4 # Print bitwise OR operation print('a | b =', a | b)>

出力

個別の SQL カウント
a | b = 14>

ビットごとの XOR 演算子

Python のビットごとの XOR (^) 演算子 排他的 OR 演算子とも呼ばれ、2 つのオペランドに対して XOR 演算を実行するために使用されます。 XOR は排他的論理和を表し、オペランドの 1 つが true の場合にのみ true を返します。ビット単位の演算のコンテキストでは、2 つのオペランドの対応するビットを比較します。ビットが異なる場合は 1 を返します。それ以外の場合は 0 を返します。

例: 2 つのビット値 X と Y を取得します。ここで、 X = 7= (111)2 および Y = 4 = (100)2 です。 X と Y の両方をビットごとに取得します

パイソン
a = 10 b = 4 # print bitwise XOR operation print('a ^ b =', a ^ b)>

出力

a ^ b = 14>

ビット単位の NOT 演算子

前述の 3 つのビット演算子は二項演算子であり、機能するには 2 つのオペランドが必要です。ただし、他の演算子とは異なり、この演算子は 1 つのオペランドのみで動作します。

Python のビット単位の否定 (~) 演算子 単一の値を処理し、その 1 の補数を返します。これは、値のすべてのビットを切り替えて、0 ビットを 1 に、1 ビットを 0 に変換し、2 進数の 1 の補数を生成することを意味します。

: 2 つのビット値 X および Y を取得します。ここで、X = 5= (101)2 です。 X のビット単位の NOT を取得します。

パイソン
a = 10 b = 4 # Print bitwise NOT operation print('~a =', ~a)>

出力

~a = -11>

ビット単位のシフト

これらの演算子は、数値のビットを左または右にシフトし、それぞれ数値を 2 で乗算または除算するために使用されます。これらは、数値を 2 で乗算または除算する必要がある場合に使用できます。

JavaScriptのコメント

パイソン ビット単位の右シフト

数値のビットを右にシフトし、結果として左側の空白部分に 0 を埋めます (負の数の場合は 1 を埋めます)。数値を 2 の累乗で割った場合と同様の効果があります。

  Example 1:   a = 10 = 0000 1010 (Binary) a>> 1 = 0000 0101 = 5 例 2: a = -10 = 1111 0110 (バイナリ) a>> 1 = 1111 1011 = -5>>'パイソン 
a = 10 b = -10 # print bitwise right shift operator print('a>> 1 =', a>> 1) print('b>> 1 =', b>> 1)>>

出力

パイソン ビット単位の左シフト

数値のビットを左にシフトし、結果として右の空白部分に 0 を埋めます。数値に 2 の累乗を乗算した場合と同様の効果。

  Example 1:   a = 5 = 0000 0101 (Binary) a << 1 = 0000 1010 = 10 a << 2 = 0001 0100 = 20   Example 2:   b = -10 = 1111 0110 (Binary) b << 1 = 1110 1100 = -20 b << 2 = 1101 1000 = -40>
パイソン
a = 5 b = -10 # print bitwise left shift operator print('a << 1 =', a << 1) print('b << 1 =', b << 1)>

出力:

a << 1 = 10 b << 1 = -20>

ビット単位の演算子のオーバーロード

演算子のオーバーロード あらかじめ定義された運用上の意味を超えて拡張された意味を与えることを意味します。たとえば、演算子 + は、2 つの整数を加算したり、2 つの文字列を結合したり、2 つのリストを結合したりするために使用されます。これは、「+」演算子が int クラスと str クラスによってオーバーロードされているため実現可能です。同じ組み込み演算子または関数が、異なるクラスのオブジェクトに対して異なる動作を示すことに気づいたかもしれません。これは、と呼ばれます。 演算子のオーバーロード

以下は、ビットごとの演算子のオーバーロードの簡単な例です。

パイソン
# Python program to demonstrate # operator overloading class Geek(): def __init__(self, value): self.value = value def __and__(self, obj): print('And operator overloaded') if isinstance(obj, Geek): return self.value & obj.value else: raise ValueError('Must be a object of class Geek') def __or__(self, obj): print('Or operator overloaded') if isinstance(obj, Geek): return self.value | obj.value else: raise ValueError('Must be a object of class Geek') def __xor__(self, obj): print('Xor operator overloaded') if isinstance(obj, Geek): return self.value ^ obj.value else: raise ValueError('Must be a object of class Geek') def __lshift__(self, obj): print('lshift operator overloaded') if isinstance(obj, Geek): return self.value << obj.value else: raise ValueError('Must be a object of class Geek') def __rshift__(self, obj): print('rshift operator overloaded') if isinstance(obj, Geek): return self.value>> obj.value else: raise ValueError('クラス Geek のオブジェクトである必要があります') def __invert__(self): print('反転演算子がオーバーロードされました') return ~self.value # ドライバーのコード if __name__ == '__main__': a = Geek(10) b = Geek(12) print(a & b) print(a | b) print(a ^ b) print(a<< b) print(a>> b) print(~a)>>

出力:

And operator overloaded 8 Or operator overloaded 14 Xor operator overloaded 8 lshift operator overloaded 40960 rshift operator overloaded 8 Invert operator overloaded -11>

注記: 演算子のオーバーロードについて詳しく知るには ここをクリック