9

如果您只有 AND 和 OR 运算,您将如何进行 XOR 位运算?

4

11 回答 11

14

AND的真值表

  AB 和
  TTT
  TFF
  FTF
  FFF
  

OR的真值表

  乙或
  TTT
  TFT
  光纤到户
  FFF
  

异或的真值表

  AB异或
  TTF
  TFT
  光纤到户
  FFF
  

所以,XOR 就像 OR 一样,只是如果 A 和 B 为真则为假。

所以,(A OR B) AND (NOT (A AND B)),即 (A OR B) AND (A NAND B)

  AB OR AND NAND [(A OR B) AND (A NAND B)]
  TTTTFF
  TFTFTT
  傅立叶变换
  FFFFTF
  

不确定是否可以在没有 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 ( ) 之外还有算术运算符,那么您可以像这样进行按位 XOR:-&|

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

这样做的原因是我们正在进行全加,当 amy 给定位位置的总和 <= 1 时,这相当于 XOR,然后我们正在纠正生成进位 (1 + 1) 的情况通过减去2 * (a & b)

请注意,即使中间项溢出,这也有效,假设我们有“正常行为”的整数(2 的补码,溢出的模 2 环绕等)。

于 2011-03-21T11:47:31.190 回答
3

(a XOR b) = ((a OR b) - (a AND b)),或者换句话说,并集减去交集。

代码示例(在 javascript 中):

var a = 5;
var b = 12;
var xor = (a | b) - (a & b); // result: 9
于 2017-12-01T06:48:48.243 回答
2

Wikipedia 关于 XOR 的条目详细介绍了这一点。在提出 SO 问题之前,可能是一个很好的首先检查的地方。

如果您已经有一些您不关心的位被屏蔽掉,那么在我看来,最简单的方法(就编写代码而言)就是使用您的不相等运算符。

于 2011-01-17T16:19:16.470 回答
1

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

于 2014-08-29T16:53:40.400 回答
0

在蟒蛇

...:def xor(a,b):
...:     c = (not a) and b
...:     d = (not b) and a
...:     e = not c
...:     f = not d
...:     g = e and f
...:     h = not g
...:     return h
于 2020-01-19T23:44:05.633 回答
0
  PrintF('%-10s XOR',[inttobinbyte((10 OR 12)-(12 AND 10))])

00000110 异或

于 2021-03-01T15:31:33.423 回答
-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 回答