Python の場合:
ビット単位の演算はすべて、演算に参加する数値のバイナリ形式で実行されます。
1. AND演算:AとBの値が両方とも1の場合、A、B、およびの演算結果は1、それ以外の場合は0になります(演算子:&)
2. : A または B の値が 1 の場合、A、B または の演算結果は 1、それ以外の場合は 0 (演算子: |)
3. XOR 演算: A と B が 1 と異なる場合のみ、予算A と B の結果は 1、それ以外の場合は 0 (演算子: ^)
4. ビットごとの反転 (ビットごとの否定): メモリ内の数値を表す 2 進数を反転し、0 は 1 になり、1 は 0 になります (演算子: ~)。 )
演算方法:
1. AND演算: 5&3の計算プロセスは、0101(2)&0011(2)=0001(2)=1です
注: のように、両方の数値を2進数に変換して比較することを意味します。上の例: 5 の 2 進数は 0101,3 の 2 進数は 0011 です。この場合、これら 2 つの数値の 2 進数の最初のビットは同じで、1 であり、残りはすべて 0 です。 0001 を取得し、それを 10 進数に変換すると、結果は 1 になります
理解を容易にするために、別の例、「Python コア プログラミング」の表 5-4 の例を見てみましょう: >>>30&45 結果は 12 です
つまり、30 = (011110), 45=(101101) ビット演算の結果は 12(1100) になります
残りの 3 つのビット演算はこれと同じです
2 または演算: 5|3 計算プロセスは 0101 です。 (2)|0011(2)=0111(2)= 7
3. XOR 演算: 5^3 の計算プロセスは 0101(2)^0011(2)=0110(2)=6
4 です。 (ビット単位の否定): 5=0101(2) 計算プロセス~5=1010(2) 例: 一定量を左に移動するビット単位の演算、例: 2=0010(2) 2
2. >>: 右シフト方法は左シフトと同じですが、方向が逆です
コンピューターにおける負の数の表現:元の数値を反転した後ビット単位 + 1 = 元の数値の補数 (元の数値の逆数)
元の数値: 通常の数値を形成するためにコンピューター内の 2 進法で表されます 数値は元の数値です 例: 5=00000000 00000000 00000000 000001015 は 11111111 11111111 11111111 11111010 の補数です。C 言語での -5 のバイナリ表現: 優先順位は高いものから低いものまで ~、&、^、| です。 の典型的な使用法は 2 つあります1 つは、ビット列情報の特定のビットを取得することです。たとえば、次のコードは x 7 ビットの最下位ビットをインターセプトします: x & 0177。 2 つ目は、変数が特定のビットを保持し、残りを 0 のままにできるようにすることです。たとえば、次のコードでは、x が下位 6 ビットのみを保持できるようにします: x = x & 077。 ビットごとの OR 演算の一般的な使用法は、ビット文字列情報の特定のビットを 1 に設定することです。右端の 4 ビットを 1 として取得し、他のビットは変数 j の元のビットと同じままにする場合は、論理 OR 演算 017|j を使用できます ビットごとの XOR 演算の一般的な使用法は次のとおりです。ビット列情報内の特定のビットの情報 その逆。整変数 j の情報の右端 4 ビットの逆数を見つけたい場合は、論理 XOR 演算 017^j を使用して、j の情報の右端 4 ビットの逆数、つまり元々 1 だったビットを見つけます。 、結果は 0 で、元のビットが 0 の場合、結果は 1 です。 a=3、b=4の場合、一時変数を使用せずに2つの値を交換します。 a と b の値を交換したい場合は、次の代入ステートメントを使用できます: a=b^a; a=a^b;定数を生成するためによく使用されます。変数 x の下位 6 ビットを 0 に設定し、残りのビットを変更しない場合は、コード x = x & ~077 を使用してこれを実現できます。