9

AND 演算と OR 演算しか利用できない場合、XOR ビット演算はどのように行うのですか?

4

11 に答える 11

14

AND の真理値表

  バンド
  TTT
  TFF
  FTF
  FFF
  

OR の真理値表

  ABまたは
  TTT
  TFT
  FTT
  FFF
  

XOR の真理値表

  AB XOR
  TTF
  TFT
  FTT
  FFF
  

したがって、XOR は OR と同じですが、A と B が true の場合に false になります。

したがって、(A OR B) AND (NOT (A AND B))、つまり (A OR B) AND (A AND B)

  AB OR AND NAND [(A OR B) AND (A NAND B)]
  TTTTFF
  TFTFT
  FTTFTT
  FFFFF
  

NOTまたはNANDなしで実行できるかどうかわからない

于 2011-01-17T16:18:27.190 に答える
4

独自のスクリプト言語(ChrisScript)を作成するには、次のようなものが必要です。

#!/bin/chrish

bit XOR (bit A, bit B)
{
   bit notA;
   bit notB;

   IF (A == 0) notA = 1 ELSE notA = 0;
   IF (B == 0) notB = 1 ELSE notB = 0;

   F = ((A && notB) || (notA && B));

   RETURN F;
}

NOTがなくても、このようにエミュレートできます。しかし、これは、何らかの形のインバーターがなくても得られる最善の解決策です。何らかの形のインバーターが利用できないとは信じがたいです。どのスクリプト環境を使用していますか?

于 2011-01-17T16:24:24.093 に答える
4

「システム ({T, F}, and) および ({T, F}, or) はモノイドです。」

「系 ({T, F}, xor) はアーベル群」であり、モノイドとは異なり可逆性を持つ。

したがって、「and」と「or」は「xor」操作を構成できません。

ソース: https://en.wikipedia.org/wiki/Exclusive_or#Relation_to_modern_algebra

于 2015-10-19T13:49:36.993 に答える
3

ビットごとの AND ( ) と OR ( ) に加えて+andなどの算術演算子がある場合は、次のようにビットごとの XOR を実行できます。-&|

int bitwise_XOR(int a, int b)
{
    return (a + b) - (a & b) - (a & b);
}

これが機能する理由は、全加算を行っているためです。これは、特定のビット位置の合計が 1 以下の場合に XOR と同等であり、キャリーが生成された場合 (1 + 1) を修正しています。を差し引いて2 * (a & b)

これは、「正常に動作する」整数 (2 の補数、オーバーフローのモジュロ 2 ラップアラウンドなど) があると仮定して、中間項がオーバーフローした場合でも機能することに注意してください。

于 2011-03-21T11:47:31.190 に答える
2

ウィキペディアの XOR に関するエントリでは、これについて詳しく説明しています。おそらく、SO の質問をする前に最初に確認するのに適した場所です。

気にしないビットが既にマスクされている場合、それを行う最も簡単な方法は (とにかくコードを書く限り)、等しくない演算子を使用することです。

于 2011-01-17T16:19:16.470 に答える
1

C: x ^ y = (x & ~y) | (~x & y)

于 2014-08-29T16:53:40.400 に答える
-1

以下の式が正しいと確信しています。

a xor b = not((a and b) or not(a+b))

于 2011-01-17T16:18:25.460 に答える
-3

最良のアドバイスは、ネット上のリファレンス マニュアルや百科事典サイトで XOR を検索し、XOR 組み込み関数の説明と同じことを行うコードまたはスクリプトを記述し、独自の戻り値またはステータス値を使用することです。そのようなビットの比較を行う方法を、ソフトウェア コミュニティ内から説明することはできません。

于 2011-01-17T16:17:53.887 に答える