如何相互转换 xor, and, not operators

How to convert xor, and, not operators mutually

我正在阅读一篇关于加密哈希函数的论文。它显示了一个我很难理解的公式转换。

Ch(x,y,z) = (x & y) ^ (~x & z)

在上面,&是按位与,^是按位异或,~是按位非。可以简化为:

Ch(x,y,z) = ((y^z)&x)^z

不知道怎么算的

向后工作,从:

开始
((y ^ z) & x) ^ z

分配“&x”:

((y & x) ^ (z & x)) ^ z

删除多余的括号:

(y & x) ^ (z & x) ^ z

通勤操作数:

(x & y) ^ (x & z) ^ z

添加括号:

(x & y) ^ ((x & z) ^ z)

将"A ^ B = (~A & B) | (A & ~B)"应用于右侧:

(x & y) ^ ((~(x & z) & z) | ((x & z) & ~z))

删除多余的括号:

(x & y) ^ ((~(x & z) & z) | (x & z & ~z))

应用"A & ~A = 0":

(x & y) ^ ((~(x & z) & z) | (x & 0))

应用"A & 0 = 0":

(x & y) ^ ((~(x & z) & z) | (0))

应用"A | 0 = A":

(x & y) ^ ((~(x & z) & z))

删除多余的括号:

(x & y) ^ (~(x & z) & z)

应用德摩根定律“~(A & B) = (~A | ~B)”:

(x & y) ^ ((~x | ~z) & z)

分发“&z”:

(x & y) ^ ((~x & z) | (~z & z))

应用"A & ~A = 0":

(x & y) ^ ((~x & z) | (0))

应用"A | 0 = A":

(x & y) ^ (~x & z)

因此,(x & y) ^ (~x & z)等同于((y ^ z) & x) ^ z

a truth table should convince you it is correct

尝试在 ASCII 艺术中绘制真值表非常乏味,因此对于以下...

z=0      x      z=1      x 
     |  0 1          |  0 1
   --+-------      --+-------      ===     a b   e f
 y 0 |  a b      y 0 |  e f                c d   g h
   1 |  c d        1 |  g h

所以...

x & y  =  0 0   0 0     ~x & z  =  0 0   1 0 
          0 1   0 1                0 0   1 0

因此:

(x&y) ^ (~x&z)  =  0 0   1 0
                   0 1   1 1

现在解决部分问题:

        y ^ z  =  0 0   1 1
                  1 1   0 0

    (y^z) & x  =  0 0   0 1
                  0 1   0 0

((y^z)&x) ^ z  =  0 0   1 0
                  0 1   1 1

令人高兴的是,这与我们对原始表达式的看法相同。