【问题标题】:What are XAND and XOR什么是 XAND 和 XOR
【发布时间】:2011-02-08 10:40:29
【问题描述】:

什么是 XAND 和 XOR?还有一个XNot

【问题讨论】:

  • XOR 除外,但我没听说过。布尔运算符只能有 15 个,如果不将它们全部组合起来,则只有 7 个。
  • 你是指NAND而不是XAND?
  • 其实仔细想想,XAnd和And一模一样
  • 并非如此。 XAND 将是 XNOR,其中两个输入相等(高或低)将导致输出为高(或真)。

标签: operators


【解决方案1】:

XOR 是异或。这意味着“被异或的两个项目之一是真的,但不是他们两个。”

TRUE XOR TRUE : FALSE
TRUE XOR FALSE : TRUE
FALSE XOR TRUE : TRUE
FALSE XOR FALSE: FALSE

Wikipedia's XOR Article

XAND 我没听说过。

【讨论】:

  • 让我们使用 XAND 的类比:“XAND 的两个项目都是真的,但不是两个。”矛盾!所以不存在 TRUE 的情况。 XAND 将永远是 FALSE。
【解决方案2】:

XORexclusive or 的缩写。它是一个逻辑二元运算符,要求两个操作数之一为真,但不能同时为真。

所以这些说法是正确的:

TRUE XOR FALSE
FALSE XOR TRUE

这些陈述是错误的:

FALSE XOR FALSE
TRUE XOR TRUE

实际上并没有“排他性和”(或XAND)这样的东西,因为理论上它与XOR 具有相同的确切要求。也没有XNOT,因为NOT 是一个否定其单个操作数的一元运算符(基本上它只是将一个布尔值翻转为其相反),因此它不支持任何排他性概念。

【讨论】:

  • XAND 等同于 XNOR 而不是 XOR。
  • 这也会让大多数人感到困惑,这就是为什么它通常被列为 XNOR。
  • 排他的“非或”实际上应该不是“排他的或”
  • 这并不能阻止它被称为 XNOR。
  • @Matthew Whited:“XAND 将等同于 XNOR 而不是 XOR。”这是一个错误的说法。 XNOR 和 XOR 本身是不同的。正如 NOR 是 OR 的反义词一样,XNOR 也是 XOR 的反义词。 NOR 中的“N”代表“否定”或“否定”。 XAND 总是 FALSE,所以不需要 XAND。
【解决方案3】:

没有像 Xand 或 Xnot 这样的东西。还有Nand,和and相反

TRUE and TRUE   : TRUE
TRUE and FALSE  : FALSE
FALSE and TRUE  : FALSE
FALSE and FALSE : FALSE


TRUE nand TRUE   : FALSE
TRUE nand FALSE  : TRUE
FALSE nand TRUE  : TRUE
FALSE nand FALSE : TRUE

【讨论】:

  • 实际上,即使 'nand' 和 'nor' 分别与 'and' 和 'or' 相反,你会认为它们只是通过附加到输出的 'not' 门来实现的和/或。但是“nand”和“nor”实际上可以用比它们更传统的对应物更少的 cmos 门来实现。优化电路的一种方法是用 'nand' 和 'nor' 门替换尽可能多的 'and' 和 'or' 门。
  • 在 CMOS 和 NMOS 逻辑中,“与”和“或”门可以廉价级联到较小的深度,这样“非((A 或 B)和(C 或 D))”具有与四输入 NAND 或 NOR 门的成本基本相同。有一种常见的逻辑运算可能值得拥有自己的术语和语言运算符,但在许多情况下没有:“X 而不是 Y”。请注意,缺少用于此目的的运算符可能会导致表达式中出现意外行为,例如myUint64 &= ~0x80000000 [需要清除操作数中设置的变量的所有位,而是...
  • ...除了所需的位之外,它还会清除整个 32 位]。顺便说一句,在某些情况下,对于 ? : 运算符来说,有一个很好的 3 输入逻辑运算,而 &| 对于 &&|| 运算符来说是这样的;本质上,X mux Y vs Z 意味着(X & Y) | (~X & Z)
【解决方案4】:

嗯.. 我知道 XOR(异或)和 NAND 和 NOR。这些是逻辑门并且有它们的软件类似物。

基本上它们的行为是这样的:

XOR 仅在两个参数之一为真时为真,但不是同时为真。

F XOR F = F
F XOR T = T
T XOR F = T
T XOR T = F

只要两个参数都不为真,NAND 就为真。

F NAND F = T
F NAND T = T
T NAND F = T
T NAND T = F

只有当两个参数都不为真时,NOR 才为真。

F NOR F = T
F NOR T = F
T NOR F = F
T NOR T = F

【讨论】:

    【解决方案5】:

    XOR 的行为就像 Austin 解释的那样,作为异或,A 或 B,但不是两者,也不会产生 false。

    两个输入有 16 种可能的逻辑运算符,因为真值表由 4 种组合组成,有 16 种可能的方式来排列两个布尔参数和相应的输出。

    他们都有根据this wikipedia article的名字

    【讨论】:

      【解决方案6】:

      伙计们,不要吓唬别人(嘿!开个玩笑),但这实际上都是对等和同义词的问题:

      首先:

      “XAND”在逻辑上不存在,“XNAND”也不存在,但是“XAND”通常是由一个好学但困惑的初始逻辑学生想到的。(哇!)。它源于这样的想法,如果存在 XOR(异或),那么存在“XAND”(“异或”)是合乎逻辑的。合理的建议是“ IAND”(“包容性” AND),它也未被使用或识别。所以:

       XNOR <=> !XOR <=> EQV
      

      所有这些只是描述了一个唯一的运算符,称为等价运算符(,EQV)所以:

      A  |  B  | A <=> B | A XAND B | A XNOR B | A !XOR B | ((NOT(A) AND B)AND(A AND NOT(B)))
      ---------------------------------------------------------------------------------------
      T  |  T  |    T    |     T    |     T    |     T    |                T    
      T  |  F  |    F    |     F    |     F    |     F    |                F    
      F  |  T  |    F    |     F    |     F    |     F    |                F    
      F  |  F  |    T    |     T    |     T    |     T    |                T    
      

      结束语:'X' 前缀只有当且仅当基本运算符不是一元时才可能。所以,XNOR NOT XOR X NOR。

      和平。

      【讨论】:

      【解决方案7】:

      在 Charles Petzold 写的名为“代码”的书中,他说有 6 个门。有 AND 逻辑门、OR 门、NOR 门、NAND 门和 XOR 门。他还提到了第 6 门,将其简单地称为“巧合门”,并暗示它并不经常使用。他说它具有与异或门相反的输出,因为当异或门具有等式的两个真或两个假边时,异或门的输出为“假”,而异或门使其输出为真的唯一方法是等式的一方为真,另一方为假,这并不重要。巧合与此完全相反,因为对于巧合门,如果一个为真而另一个为假(不管哪个是假的),那么在这两种情况下它的输出都是“假的”。巧合门使其输出为“真”的方式是双方都为假或真。如果两者都为假,则巧合门将评估为真。如果两者都为真,那么巧合门也会在这种情况下输出“真”。

      所以在异或门输出“false”的情况下,巧合门将输出“true”。而在异或门输出“真”的情况下,巧合门输出“假”。

      【讨论】:

      • xor 的反面是一个很常见的门,但还有一对你没有提到:A and not BA or not B。如果AB 不可互换,人们也可以将B and not AB or not A 视为额外的门类型。
      【解决方案8】:

      此外,由于我只是在处理它,如果您正在寻找“等价门”或“符合门”作为 XAND,那么您真正拥有的只是“等于”。

      如果你考虑一下,从上面给出 XOR:

      F XOR F = F
      F XOR T = T
      T XOR F = T
      T XOR T = F
      

      我们期望 XAND 应该是:

      F XAND F = T
      F XAND T = F
      T XAND F = F
      T XAND T = T
      

      这不完全一样吗?

      F == F = T
      F == T = F
      T == F = F
      T == T = T
      

      【讨论】:

      • XOR:“一个或另一个,但不是两者。”所以,我希望,XAND:“一个和另一个,但不是两个。”由于 AND 意味着两个 TRUE 为真,并且排除运算符将它们排除在外,因此所有结果都将为 FALSE。因此,XAND 只是 FALSE。
      • @ingyhere 我完全同意你的观点,大多数答案没有意义。语义表明输出是独占的,这意味着操作数不能同时处于同一状态。 OR 的逻辑结果不仅仅是 AND 的否定结果,所以我希望 XAND 也不是 XOR 的否定版本。 XAND 应该为所有输入值返回 FALSE。
      【解决方案9】:

      有一个简单的论据来查看二进制逻辑门的来源,使用已经出现的真值表。

      有六个表示交换运算,其中 a op b == b op a。每个二元运算符都有一个关联的三列真值表来定义它。前两列可以固定为所有运算符的定义表。

      考虑第三列。它是四个二进制数字的序列。有十六种组合,但交换律的约束有效地从真值表中删除了一行,所以它只有八种。还有两个被淘汰了,因为所有的真理或所有的错误都不是有用的门。这些是熟悉的 or、and 和 xor,以及它们的否定。

      【讨论】:

        【解决方案10】:

        众所周知,XOR 定义是奇校验函数。 对于两个输入:

        A XOR B = (A AND NOT B) OR (B AND NOT A)

        XOR 的补码是 XNOR

        A XNOR B = (A AND B) OR (NOT A AND NOT B)

        此后,正常的双输入 XAND 定义为

        A XAND B = A AND NOT B

        补码是XNAND:

        A XNAND B = B OR NOT A

        这个 XAND 定义的一个很好的结果是,任何双输入二进制函数都可以使用不超过一个逻辑函数或门来简明地表达。

                    +---+---+---+---+
           If A is: | 1 | 0 | 1 | 0 |
          and B is: | 1 | 1 | 0 | 0 |
                    +---+---+---+---+
            Then:        yields:     
        +-----------+---+---+---+---+
        | FALSE     | 0 | 0 | 0 | 0 |
        | A NOR B   | 0 | 0 | 0 | 1 |
        | A XAND B  | 0 | 0 | 1 | 0 |
        | NOT B     | 0 | 0 | 1 | 1 |
        | B XAND A  | 0 | 1 | 0 | 0 |
        | NOT A     | 0 | 1 | 0 | 1 |
        | A XOR B   | 0 | 1 | 1 | 0 |
        | A NAND B  | 0 | 1 | 1 | 1 |
        | A AND B   | 1 | 0 | 0 | 0 |
        | A XNOR B  | 1 | 0 | 0 | 1 |
        | A         | 1 | 0 | 1 | 0 |
        | B XNAND A | 1 | 0 | 1 | 1 |
        | B         | 1 | 1 | 0 | 0 |
        | A XNAND B | 1 | 1 | 0 | 1 |
        | A OR B    | 1 | 1 | 1 | 0 |
        | TRUE      | 1 | 1 | 1 | 1 |
        +-----------+---+---+---+---+
        

        请注意,XAND 和 XNAND 缺乏自反性。

        如果我们添加编号种类的异与以对应于它们对应的最小项,则此 XNAND 定义是可扩展的。然后 XAND 必须有 ceil(lg(n)) 或更多输入,未使用的 msb 全为零。除非在其他类型的上下文中使用,否则普通类型的 XAND 不带数字。

        各种 XAND 或 XNAND 门可用于解码。

        XOR 也可以扩展到任意位数。如果个数是奇数,结果是一,如果是偶数,结果是零。如果对 XOR 的任何输入或输出位进行补码,则该函数变为 XNOR,反之亦然。

        我没有看到XNOT的定义,我会提出一个定义:

        让它与高阻抗相关(Z,无信号,或者可能是空值布尔类型对象)。

        0xnot 0 = Z
        0xnot 1 = Z
        1xnot 0 = 1
        1xnot 1 = 0
        

        【讨论】:

        • 您的详尽列表不包括 0 (false)。
        • XAND 和 XNAND 在维基百科中分别被列为“矛盾”(即:FALSE)和“重言式”(TRUE)。您是否有指向以不同方式定义这两个操作的某个文档的链接?
        • 阅读“从此以后”。当您可以直接连接到 HI 或 LO 时,为什么要为 T 或 F 使用逻辑门?尽管如此,使用这个定义,A XAND A = FALSE,A XNAND A = TRUE。
        • 不是说 WP 是权威的或可靠的,但出于好奇,这是哪篇 WP 文章?它似乎没有出现在矛盾、重言式或逻辑文章下;并且似乎没有专门针对 XAND 或 XNAND 或“独占与”或“独占 NAND”的文章。
        • 我在en.wikipedia.org/wiki/Truth_table 看到它。不过,看起来它在几天前被删掉了。
        【解决方案11】:

        看看

        x   y      A    B   C   D   E   F   G   H   I   J   K   L   M   N
        
        ·   ·      T    ·   T   ·   T   ·   T   ·   T   ·   T   ·   T   ·
        ·   T      ·    T   T   ·   ·   T   T   ·   ·   T   T   ·   ·   T
        T   ·      ·    ·   ·   T   T   T   T   ·   ·   ·   ·   T   T   T
        T   T      ·    ·   ·   ·   ·   ·   ·   T   T   T   T   T   T   T
        
        A) !(x OR y)    
        B) !(x) AND y   
        C) !(x) 
        D) x AND !(y)   
        E) !(y) 
        F) x XOR y  
        G) !(x AND y)   
        H) x AND y  
        I) !(x XOR y)   
        J) y    
        K) !(x) OR y    
        L) x    
        M) x OR !(y)    
        N) x OR y
        

        【讨论】:

          【解决方案12】:

          首先是逻辑,然后是名称,可能是以前命名的模式。

          因此 0+0=0; 0+1=1; 1+0=1; 1+1=1 - 出于某种原因,这被称为 OR。

          那么0-0=0; 0-1=1; 1-0=1; 1-1=0 - 它看起来像 OR 除了...我们称之为 XOR。

          也是 0*0=0; 0*1=0; 1*0=0; 1*1=1 - 出于某种原因,这被称为 AND。

          那么0~0=0; 0~1=0; 1~0=0; 1~1=0 - 它看起来像 AND 除了...我们称之为 XAND。

          【讨论】:

            【解决方案13】:

            维基上的真值表澄清http://en.wikipedia.org/wiki/Logic_gate 没有 XAND,这就是问题合法性的第 1 部分的结尾。 [关键是你总是可以不用它。]

            我个人将 XNOT(也不存在)误认为 NAND 和 NOR,理论上这是你唯一需要制作所有其他门的东西 link

            我认为混淆源于您可以使用 NAND 或 NOR(创建其他所有东西 [但它们不需要一起使用]),因此它被认为是 NAND 和 NOR 一起使用的东西,基本上留心替换剩余的未使用名称 XNOT,所以我错误地称之为 XNOT,意思是它是 NAND 或 NOR。

            我想在快速讨论中也可能错误地尝试使用 XAND,就像我使用 XNOT 一样,指的是“一个门(以各种排列方式复制)使所有其他门成为逻辑现实。

            【讨论】:

              【解决方案14】:

              天哪,XAND 门确实存在。我爸爸正在上技术课找工作,那里有一个 XAND 门。人们说 OR 和 AND 都是 完全 对立的,所以他们将其扩展到排他门逻辑:

              XOR:一个另一个,但不是两个。

              Xand:一个另一个,但不是两个。

              这是不正确的。如果要从 XOR 更改为 XAND,则必须翻转“AND”和“OR”的每个实例:

              XOR:一个另一个,但不是两个。

              XAND:一个另一个,但不是一个。

              因此,当且仅当两个输入相等时,XAND 才为真,无论输入是 0/0 还是 1/1

              【讨论】:

              • 您描述的门是XNOR。我从来没有听说过它叫做 XAND。
              • 它们是同一个东西,我忘了把它放在我的评论中
              【解决方案15】:

              XOR (not both and not both) B'0110' 是相反的 IFF 的(双)(当且仅当)B'1001'。

              【讨论】:

                【解决方案16】:

                这就是您要查找的内容: https://en.wikipedia.org/wiki/XNOR_gate

                这是逻辑表:

                A B   XOR XNOR
                0 0   0   1 
                0 1   1   0
                1 0   1   0
                1 1   0   1
                

                XNOR 有时也称为 XAND。

                【讨论】:

                  【解决方案17】:

                  在大多数情况下,您不会在编程中找到 Xand、Xor、nor、nand 逻辑运算符,但不要担心在大多数情况下您可以用其他运算符模拟它。

                  因为您没有说明任何特定的语言。我也不会做任何特定的语言。对于我的示例,我们将使用以下变量。

                  A = 3
                  B = 5
                  C = 7

                  对于代码,我会将其放在代码标记中,以便更容易看到我所做的事情,我还将在整个过程中遵循逻辑以显示最终结果。

                  NAND

                  也称为 Not And,可以使用 Not 运算符轻松模拟,(通常表示为 !)

                  您可以执行以下操作

                  if(!((A&gt;B) &amp;&amp; (B&lt;C)))

                  如果 (!(F&&T))
                  如果(!(F))
                  如果(T)

                  在我们上面的例子中,这将是正确的,因为双方都不正确。从而给我们想要的结果

                  NOR

                  也称为 Not OR,就像 NAND 我们可以用 not 运算符模拟它。
                  if(!((A&gt;B) || (B&lt;C)))

                  如果 (!(F||T))
                  如果(!(T))
                  如果(F)

                  这又会给我们带来预期的结果

                  异或

                  异或或异或只有当一个为真而另一个为假时才会为真

                  If (!(A &gt; C &amp;&amp; B &gt; A) &amp;&amp; (A &gt; C || B &gt; A) )

                  如果 (!(F && T) && (F || T) )
                  如果 (!(F) && (T) )
                  如果 (T && T)
                  如果 (T)

                  所以这是一个仅适用于 1 或另一个为真的示例,我将展示如果两者都为真,它将为假。

                  If ( !(A &lt; C &amp;&amp; B &gt; A) &amp;&amp; (A &lt; C || B &gt; A) )

                  如果 ( !(T && T) && (T ||T) )
                  如果 ( !(T) && (T) )
                  如果 ( F && T )
                  如果 (F)

                  都是假的

                  If (!(A &gt; C &amp;&amp; B &lt; A) &amp;&amp; (A &gt; C || B &lt; A) )

                  如果 (!(F && F) && (F || F) )
                  如果 (!(F) && (F) )
                  如果 (T && F )
                  如果(F)


                  还有图片帮忙

                  XAND

                  最后是我们的 Exclusive And,如果双方都是假的,或者双方都是真的,这只会返回真。当然,您可以将其称为 Not XOR (NXOR)

                  两者都正确 If ( (A &lt; C &amp;&amp; B &gt; A) || !(A &lt; C || B &gt; A) )

                  如果 ((T&&T) || !(T||T))
                  如果 (T || !T)
                  如果 (T || F)
                  中频(T)

                  两者都是假的 If ( (A &gt; C &amp;&amp; B &lt; A) || !(A &gt; C || B &lt; A) )

                  如果 ( (F && F) || !(F ||F))
                  如果 (F || !F)
                  如果 (F || T)
                  如果 (T)

                  最后一个是真的,另一个是假的。 If ((A &gt; C &amp;&amp; B &gt; A) || !(A &gt; C || B &gt; A) )

                  如果 ((F && T) || ! (F || T) )
                  如果 (F||!(T))
                  如果 (F||F)
                  如果 (F)

                  或者,如果您想走 NXOR 路线...
                  If (!(!(A &gt; C &amp;&amp; B &gt; A) &amp;&amp; (A &gt; C || B &gt; A)))

                  如果 (!(!(F && T) && (F || T)) )
                  如果 (!(!(F) && (T)) )
                  如果 (!(T && T) )
                  如果 (!(T))
                  如果 (F)

                  当然其他人的解决方案也可能说明了这一点,我将自己的答案放在这里,因为最佳答案似乎并不理解并非所有语言都支持 XOR 或 XAND,例如 C 使用 ^ 表示 XOR 而 XAND 是甚至不支持。

                  所以我提供了一些示例,说明如何在您的语言不支持 XOR 或 XAND 作为它们自己的运算符(如 Php if ($a XOR $B))的情况下使用基本运算符模拟它。

                  至于Xnot那是什么?独家不?所以不是吗?我不知道这在逻辑门中会是什么样子,我认为它不存在。因为 Not 只是将输出从 1 反转为 0 并将 0 反转为 1。

                  希望对你有所帮助。

                  【讨论】:

                  • In most cases you won't find an Xand, Xor, nor, nand Logical operator in programming XOR 在某些编程领域非常流行,包括嵌入式系统和密码学,它也几乎用于 x86 xor eax, eax 中的每个机器级指令函数中,例如将 eax 归零。
                  猜你喜欢
                  • 2013-06-21
                  • 1970-01-01
                  • 2022-11-18
                  • 2018-04-27
                  • 1970-01-01
                  • 2020-02-26
                  • 2011-05-09
                  • 2016-08-07
                  • 2019-06-29
                  相关资源
                  最近更新 更多