Optimization 按位运算是否分布在加法上?

Optimization 按位运算是否分布在加法上?,optimization,hardware,bit-manipulation,fpga,Optimization,Hardware,Bit Manipulation,Fpga,我正在研究一个我正在尝试优化的算法,它基本上是一个非常复杂的过程,然后在一个紧密的反馈中添加一些内容。如果我可以对加法器使用进位保存加法,它将真正帮助我加快速度,但我不确定是否可以在加法中分配操作 具体而言,如果我代表: a = sa+ca (state + carry) b = sb+cb 我可以用s和c来表示(a>>>r)吗? a | b和a&b怎么样?想想 sa = 1 ca = 1 sb = 1 cb = 1 a = sa + ca = 2 b = sb + cb

我正在研究一个我正在尝试优化的算法,它基本上是一个非常复杂的过程,然后在一个紧密的反馈中添加一些内容。如果我可以对加法器使用进位保存加法,它将真正帮助我加快速度,但我不确定是否可以在加法中分配操作

具体而言,如果我代表:

  a = sa+ca  (state + carry)
  b = sb+cb
我可以用s和c来表示(a>>>r)吗? a | b和a&b怎么样?

想想

sa = 1    ca = 1
sb = 1    cb = 1
a = sa + ca = 2
b = sb + cb = 2
(a | b) = 2
(a & b) = 2
(sa | sb) + (ca | cb) = (1 | 1) + (1 | 1) = 1 + 1 = 2 # Coincidence?
(sa & sb) + (ca & cb) = (1 & 1) + (1 & 1) = 1 + 1 = 2 # Coincidence?
让我们尝试一些其他值:

sa = 1001   ca = 1   # Binary
sb = 0100   cb = 1
a = sa + ca = 1010
b = sb + cb = 0101
(a | b) = 1111
(a & b) = 0000
(sa | sb) + (ca | cb) = (1001 | 0101) + (1 | 1) = 1101 + 1 = 1110 # Oh dear!
(sa & sb) + (ca & cb) = (1001 & 0101) + (1 & 1) = 0001 + 1 = 2    # Oh dear!
因此,通过4位计数器示例证明您不能分配和/或过度添加

“>>>”(无符号或逻辑右移)怎么样。使用最后一个示例值,r=1:

sa = 1001
ca = 0001
sa >>> 1 = 0101
ca >>> 1 = 0000
(sa >>> 1) + (ca >>> 1) = 0101 + 0000 = 0101
(sa + ca) >>> 1 = (1001 + 0001) >>> 1 = 1010 >>> 1 = 0101  # Coincidence?
让我们看看这是否也是巧合:

sa = 1011
ca = 0001
sa >>> 1 = 0101
ca >>> 1 = 0000
(sa >>> 1) + (ca >>> 1) = 0101 + 0000 = 0101
(sa + ca) >>> 1 = (1011 + 0001) >>> 1 = 1100 >>> 1 = 0110  # Oh dear!
再次反例证明


所以逻辑右移也不是分布在加法上。

不,不能在二进制运算符上分布AND或or

解释

设p是一个命题,其中p:(a+B)&C=a&C+B&C

让我们假设A=2,B=3=>A+B=5

我们要证明A&C+B&C!=(A+B)和C

A=2=010

B=3=011

设010&C=x, 其中x是某个整数,其值是010和C的按位AND的结果

类似地,011&C=y,其中y是某个整数,其值是011和C的按位AND的结果

因为我们不能说p对自然数集合({0,1,…})中的所有C都成立,所以p是假的

在这种情况下,取C=2=010

x=010&010=010=2

y=011&010=010=2

5&2=101&010=000=0

很明显,x+y=0,表示(A+B)&C!=A&C+B&C


这就证明了

我认为这确实提供了一个答案,但不是一个很好的答案。如果你提供一个例子来证明你所说的是真的,那就更好了。我已经编辑了我的答案,添加了解释来证明我的答案。