2009-11-10 70 views
4

我正在尋找一個算法,我試圖優化,它基本上有點扭曲,接下來是一些額外的反饋。如果我可以對加法器使用進位保存加法,它確實會幫助我加快速度,但我不確定是否可以通過加法來分配操作。按位操作是否通過添加分配?

具體而言,如果我表示:

a = sa+ca (state + carry) 
    b = sb+cb 

可以我在S與C的項表示(一個>>> R)? a |怎麼樣? b和一個& b?

回答

7

想想吧......

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位的反例證明你不能分發和或克服增加。

>>>'怎麼樣(無符號或邏輯右移)。再次反例

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! 

證明:使用最後一個例子值,且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? 

讓我們來看看這是否是巧合了。

因此,邏輯右移不是通過增加來分配的。

1

不,您不能在二元運算符上分配AND或OR。

說明

設P爲一個命題其中P:(A + B)& C = A & C + B &Ç

讓我們採取A = 2,B = 3 => A + B = 5。

我們證明甲& C + B &!C =(A + B)&Ç

A = 2 = 010

B = 3 = 011

讓010 &Ç = x, 其中x是一些整數,其值是010和C的按位與的合成結果。

類似地011 & C = y,其中y是一些整數er,它的值是011和C的按位AND的合成結果。由於我們不能說P對於自然數集合{{0,1,...})中的所有C都成立,因此P是假的。

在這種情況下,取C = 2 = 010

X = 010 & 010 = 010 = 2

Y = 011 & 010 = 010 = 2

2 = 101 & 010 = 000 = 0

清楚,X + Y!= 0,這意味着(A + B)&!C = A & C + B & C.

因此證明了!

+0

我認爲這確實提供了一個答案,但不是一個很好的答案。如果你提供了一個例子,說明你所說的是真的,那將會好很多。 – Teepeemm 2016-06-03 14:23:08

+0

我編輯了我的答案,添加了解釋來證明我的答案。 – Anirban 2016-06-04 08:31:30