【问题标题】:Logic operator 'A doesn't imply B' using AND, OR, XOR operators使用 AND、OR、XOR 运算符的逻辑运算符“A 不暗示 B”
【发布时间】:2011-05-13 08:20:57
【问题描述】:

我有两个位掩码(比如 AB,我想知道 A 的哪个位是 1,其中对应的 B 位为 0(反之亦然)。

当然,这可以使用条件语句来实现,但我不想迭代/移位来测试位掩码的所有位。

我需要的逻辑条件没有实现(或者至少,我看不到它)。使用与逻辑门并行,我需要运算符“A 不暗示 B”(参见 Wikipedia)。

是否可以使用 AND、OR、XOR 运算符来实现这样的运算符?

【问题讨论】:

    标签: operators logic bitwise-operators


    【解决方案1】:

    根据链接的维基百科,最简单的表达是A and (not B)

    【讨论】:

      【解决方案2】:

      你可以使用:

      A xor(不是 B)

      A xor B
      

      分析:

      A  B  A xor B
      0  0     0
      0  1     1
      1  0     1
      1  1     0
      

      编辑:

      将其更改为简单的 XOR,给出问题要求的结果。也许这个问题的措辞不正确,因为解决方案似乎太简单了......

      【讨论】:

      • 优雅。有趣的是,否定表达式变成 (not A) xor B
      • 只是出于好奇,这如何给出 A 为 1 而 B 为 0 的位置?
      • @steabert 你是对的。我什至分析了它。今天我的大脑不工作了。当我的神经元连接足够时,我会在这里。
      • 好的,我来了。我已经分析了 A & !B(所以我用 & 替换了 ^)。
      • 这甚至不接近正确的函数,如果 A = 1 和 B = 0,它应该只给出 1。
      【解决方案3】:

      我会说:

      A AND (A XOR B)
      

      给你一个 1,其中 A 为 1,B 为 0。

      首先检测 A 和 B 的不同之处,然后匹配 A 为 1 的位置。

      【讨论】:

      • 这是不正确的。当 A = 0 和 B = 1 时,这不会给出结果 1。请注意问题中的“反之亦然”。
      • 请参阅下面的评论,当 A = 0 和 B = 1 时也给出 1 将归结为简单的 XOR。该问题最终被表述为“A 并不意味着 B”,并参考了 Wikipedia 文章。此外,当 A = 0 和 B = 1 时,您的答案也给出 0 :D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多