代码之家  ›  专栏  ›  技术社区  ›  Hatefiend

三值异或运算

  •  2
  • Hatefiend  · 技术社区  · 6 年前

    我有三个布尔值。我要回去了 false true 或者如果这三个都是 . 我会回来的 在其他任何情况下。根据我的研究,在某些规范中,这被称为三变量异或。

    是的 结果将来自一个只有一个参数的集合 . 我在这里指的XOR是另一个规范,其中可能有多个值 是的

    • 做这个手术最快的方法是什么? a xor b xor c

    • 如果不是三个而是n个参数呢?

    下面是我所需操作的真值表(带三个参数的异或)。

    A   B   C   -
    T   T   T   F
    T   T   F   T
    T   F   T   T
    T   F   F   T
    F   T   T   T
    F   T   F   T
    F   F   T   T
    F   F   F   F
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Leandro Keen Zapa    6 年前

    here

    好 啊。首先,要让事情变得更容易 1 和F as 0 在你的真值表里。

    乍一看,它只是一个递增的3位二进制文件。所以以一种增加的方式来安排是个好主意。看看下面。

    A   B   C       F(A,B,C)
    0   0   0       0
    0   0   1       1
    0   1   0       1
    0   1   1       1
    1   0   0       1
    1   0   1       1
    1   1   0       1
    1   1   1       0
    

    通过使用卡诺图,您将得到下面的布尔表达式。 我们得到的第一个表达式 A'B公司 .

    see image 1

    对于第二个表达式 .

    see image 2

    对于第三个表达式 .

    see image 3

    .

    enter image description here

    简单地理解卡诺图,如果有的话 1的 在直视变量表的范围内,则一个表达式项将只包含该变量。但如果 1的 在这个变量的直接视线之外,那么,这是对这个变量的一种恭维。

    F(A,B,C) = A'B + AB'+ B'C + BC'
    

    但是自从

    A XOR B = AB'+ A'B
    B XOR C = BC'+ B'C
    

    F(A,B,C) = A XOR B + B XOR C
    

    对于伪代码编程,它相当于

    result = (A XOR B) OR (B XOR C)
    //other else
    result = (A ^ B) | (B ^ C)
    
        2
  •  2
  •   subdeveloper    6 年前

    为…工作 n