【发布时间】:2011-12-16 09:39:38
【问题描述】:
如果我有像z*a + z*b + z*c + ... + z*y 这样的产品总和,则可以将z 因子移出括号之前:z(a + b + c + ... y)。
我想知道如果使用bitwise XOR 而不是乘法,怎么可能(如果是的话)做同样的技巧。
z^a + z^b + ... z^y -> z^(a + b + ... + y)
也许a, b, c ... 应该在添加之前进行预处理,例如逻辑否定或其他什么? z 可能会发生变化,因此如果需要,预处理不应依赖于特定的 z 值。
【问题讨论】:
-
AFAIK XOR 不能分配模 2^32 的加法,所以不,你不能这样做。
-
通过与 z 异或来预处理 a 到 y 不会比仅仅否定 a 到 y 慢。对于 CPU 来说,这是一个微不足道的操作。
-
听起来像是一个很好的数学证明练习:“证明没有函数
f_z(x)使得Σ(z ^ x_i) = z ^ Σ f_z(x_i)对于所有 x_i。” -
@Alex,不是为了更好的性能,而是为了解决问题。
-
Edgeluxe,虽然这本身就是一个有趣的问题,但我建议您发布一个新问题,在其中描述您要解决的问题,而不是仅仅在您询问是否您想到的一个特定解决方案是有效的。您可能会得到其他更好的解决方案来解决您的实际问题。
标签: c++ boolean-logic multiplication logical-operators boolean-operations