XORはどのような数学演算を実行しますか?
6 に答える
XOR は 2 項演算であり、「排他的論理和」の略です。つまり、ビットの1 つだけが設定されている場合、結果のビットは 1 に評価されます。
これはその機能表です:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
この演算は、数値の対応する 2 ビットごとに実行されます。
例:7 ^ 10
バイナリ:0111 ^ 1010
0111
^ 1010
======
1101 = 13
プロパティ:演算は可換、結合、自己反転です。
2を法とする足し算も同じです。
^
Pythonのビット単位のXOR 演算子です。XOR
それはあなたがpythonで綴る方法です:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR は排他的 ORの略です。可逆操作でマスクを使用してビットを「反転」できるため、暗号化で使用されます。
>>> 10 ^ 5
15
>>> 15 ^ 5
10
5
マスクはどこにありますか; (入力 XOR マスク) XOR マスクは再び入力を提供します。
ここで他の回答が言及していないことの1つは、負の数のXORです-
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
上記の機能表を使用して XOR がどのように機能するかを簡単に理解できますが、負の数でどのように機能するかはわかりません。
XOR が負の数でどのように機能するか:
この質問にはpythonのタグも付けられているので、それを念頭に置いて回答します。XOR (^
) は、ビットが異なる場合は 1 を返し、それ以外の場合は 0 を返す論理演算子です。
負の数は2 の補数として 2 進数で格納されます。2 の補数では、左端のビット位置は値の符号 (正または負) 用に予約されており、数値の値には寄与しません。
Python では、負の数は先頭のゼロではなく先頭の 1 で記述されます。したがって、2 の補数
00000000
に 8 ビットのみを使用している場合は、 からまでの パターンを01111111
0 から 127 までの整数として扱い、1xxxxxxx
負の数を書き込むために予約します。
それを念頭に置いて、XORが負の数でどのように機能するかを例で理解しましょう。式を考えてみましょう - ( -5 ^ -3 )
。
- のバイナリ表現は
-5
、1000...101
および - のバイナリ表現は
-3
と見なすことができます1000...011
。
ここで、...
はすべて 0 を表し、その数は表現に使用されるビット (32 ビット、64 ビットなど) によって異なります。MSB (Most Significant Bit)のは、バイナリ表現で表される数値が負であることを示します1
。XOR 演算は、通常どおりすべてのビットに対して実行されます。
XOR 演算 :
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
∴ -5 ^ -3 = 6
XOR 演算の後に MSB が 0 になるため、得られる結果の数値は正の数値になります。同様に、すべての負の数について、2 の補数(最も一般的に使用されるものの 1 つ) を使用してバイナリ形式での表現を考慮し、バイナリ表現で単純な XOR を実行します。
結果のMSB ビットは符号を表し、残りのビットは 最終結果の値を表します。
次の表は、結果の符号を決定するのに役立ちます。
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
XOR の基本的なルールは負の XOR 操作でも同じですが、負の数で操作が実際にどのように機能するかは、いつか誰かにとって役立つ可能性があります。
(^) XOR 演算子は、2 つの異なるビット (0 と 1) に適用されると 1 を生成します。2 つの同じビット (0 と 0 または 1 と 1) に適用されると、0 が生成されます。