如果您只有可用的和或操作,则如何进行XOR位操作?

有帮助吗?

解决方案

创建我自己的脚本语言 - 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;
}

即使没有,也可以像这样模拟。但这是如果没有某种形式的逆变器,您将获得最好的解决方案。我发现很难相信您没有某种形式的逆变器 - 您正在使用什么脚本环境?

其他提示

真相表

  A  B  AND
  T  T  T
  T  F  F
  F  T  F
  F  F  F
  

真相表

  A  B  OR
  T  T  T
  T  F  T
  F  T  T
  F  F  F
  

XOR真相表

  A  B  XOR
  T  T  F
  T  F  T
  F  T  T
  F  F  F
  

因此,XOR就像或者,如果A和B为真,则是错误的。

因此,(a或b)和(不是(a和b)),是(a或b)和(a nand b)

  A  B  OR  AND NAND [(A OR B) AND (A NAND B)]
  T  T  T    T    F        F
  T  F  T    F    T        T
  F  T  T    F    T        T
  F  F  F    F    T        F
  

不确定是否可以不用或没有

“系统({t,f},和)和({t,f},或)是单体。”

“系统({t,f},XOR)是一个阿贝尔群体”,具有与单体不同的可逆性属性。

因此,'和'和'或'或“无法构建XOR”操作。

资源: https://en.wikipedia.org/wiki/exclusive_or#relation_to_modern_algebra

如果您有算术操作员,例如 +- 除了位和(&)和或(|)然后,您可以这样做XOR:

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

这项工作的原因是我们正在完成一个完整的添加,当Amy给定位置的总和为<= 1时,这等效于XOR,然后我们要纠正生成携带的情况(1 + 1)通过减去 2 * (a & b).

请注意,即使在中间术语溢出的情况下,这也有效,假设我们已经“正常表现”整数(2的补充,Modulo 2环绕以溢出等)。

Wikipedia在XOR上的条目 详细介绍一下。可能是一个很好的第一个检查,然后再解决一个问题。

如果您已经有一个位,您不在乎蒙面,在我看来,最简单的方法(就编写代码而言,无论如何都可以使用)就是使用您的非平等操作员。

(a XOR b) = ((a OR b) - (a AND b)), ,或换句话说,联盟设置减去交点集。

代码示例(在JavaScript中):

var a = 5;
var b = 12;
var xor = (a | b) - (a & b); // result: 9

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

我很确定以下公式是正确的:

a xor b =不((a和b)或不(a+b))

最佳建议是在网络上查找参考手册和百科全网站中的XOR,然后编写与XOR内置函数的描述相同的代码或脚本,并使用您自己的返回或状态值。我们无法告诉您如何从软件社区内部进行这种类型的比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top