【问题标题】:Moving out before brackets with XOR用 XOR 在括号前移出
【发布时间】: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


【解决方案1】:

来自Wikipedia

Distributivity: 没有二元函数,连自身也没有

所以,不,很遗憾,你不能用 XOR 做类似的事情。

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2016-12-21
    • 2018-01-19
    • 2020-01-23
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多