我正在尋找一個算法,我試圖優化,它基本上有點扭曲,接下來是一些額外的反饋。如果我可以對加法器使用進位保存加法,它確實會幫助我加快速度,但我不確定是否可以通過加法來分配操作。按位操作是否通過添加分配?
具體而言,如果我表示:
a = sa+ca (state + carry)
b = sb+cb
可以我在S與C的項表示(一個>>> R)? a |怎麼樣? b和一個& b?
我正在尋找一個算法,我試圖優化,它基本上有點扭曲,接下來是一些額外的反饋。如果我可以對加法器使用進位保存加法,它確實會幫助我加快速度,但我不確定是否可以通過加法來分配操作。按位操作是否通過添加分配?
具體而言,如果我表示:
a = sa+ca (state + carry)
b = sb+cb
可以我在S與C的項表示(一個>>> R)? a |怎麼樣? b和一個& 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位的反例證明你不能分發和或克服增加。
>>>'怎麼樣(無符號或邏輯右移)。再次反例
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?
讓我們來看看這是否是巧合了。
因此,邏輯右移不是通過增加來分配的。
不,您不能在二元運算符上分配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.
因此證明了!
我認爲這確實提供了一個答案,但不是一個很好的答案。如果你提供了一個例子,說明你所說的是真的,那將會好很多。 – Teepeemm 2016-06-03 14:23:08
我編輯了我的答案,添加了解釋來證明我的答案。 – Anirban 2016-06-04 08:31:30