84

XORはどのような数学演算を実行しますか?

4

6 に答える 6

151

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を法とする足し算も同じです。

于 2013-01-25T16:58:00.743 に答える
55

^ 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 マスクは再び入力を提供します。

于 2013-01-25T16:56:52.343 に答える
5

ここで他の回答が言及していないことの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 ビットのみを使用している場合は、 からまでの パターンを011111110 から 127 までの整数として扱い、1xxxxxxx負の数を書き込むために予約します。

それを念頭に置いて、XORが負の数でどのように機能するかを例で理解しましょう。式を考えてみましょう - ( -5 ^ -3 )

  • のバイナリ表現は-51000...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 操作でも同じですが、負の数で操作が実際にどのように機能するかは、いつか誰かにとって役立つ可能性があります。

于 2020-06-16T21:31:19.770 に答える
2

(^) XOR 演算子は、2 つの異なるビット (0 と 1) に適用されると 1 を生成します。2 つの同じビット (0 と 0 または 1 と 1) に適用されると、0 が生成されます。

于 2020-07-15T14:24:54.213 に答える