代码之家  ›  专栏  ›  技术社区  ›  Dinah SLaks

加减与逻辑非的混合

  •  1
  • Dinah SLaks  · 技术社区  · 15 年前

    我发现一些练习可以用不同的方式组合n位2的补码值,并在可能的情况下简化输出。(他们的练习使用16位,但这无关紧要)。

    如:
    !(!x&!y) == x|y
    0 & y, negate the output == -1

    我在应用德摩根定律的例子中没有问题,使用和,或,但我在不使用+和时有困难。-

    如:
    !(!x+y) == x-y
    !(y-1) == -y

    如何不分发?

    编辑: 对评论的回应:我意识到这是位非。我的问题是:在代数术语中,它是如何按照代数分布的? Example on Wikipedia

    1 回复  |  直到 15 年前
        1
  •  2
  •   Evan    15 年前

    用2的补数,当你不按位求补数时,这和用负数减去1是一样的,所以 !x 等于 -x - 1 其中x可以是单个变量或表达式。

    从开始 !(!x+y) 很好 !X 将会是 -X - 1 那么它就是 !(-x - 1 + y) 成为 -(-x - 1 + y) - 1 它简化为 x - y .

    为了 !(y-1) ,变成 -(y - 1) - 1 = -y + 1 - 1 = -y .