我正在查看两个不同MD5实现的代码,我看到F(一个按位三元操作)实现了两种不同的方式:
在C:
#define f1(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define f2(x, y, z) ((z) ^ ((x) & ((z) ^ (y))))
在Pseudo:
f1 = (x And y) Or ((Not x) And z)
f2 = z Xor (x And (z Xor y))
我能够将自己的大脑包裹起来是一个人如何在第一时间想出f2。我可以自己想出f1,因为它是你听到的逻辑代码(如果是x然后是其他z) - 但我无法想出f2。
要明确 - 我理解 f2正在做什么以及Xor如何工作 - 我无法理解某人如何从f1到f2 ...他们是如何知道使用xor的那种方式相当吗?
我无法使用某些东西,因为它有效 - 我想了解它的工作原理。
有人可以解释数学"可以这么说吗? 是否有特定的规则可以使用Xor来优化和/或/不?