2015-11-20 24 views
0

將一對十進制數轉換爲二進制並執行二進制異或運算是很容易的,但它可能在基10世界中實現異或運算?實現十進制異或運算

我們大概可以建立一個100個入口表,或者也許有一些算術計算可以爲我們做。

它必須保留XOR屬性: 1. a(op)b→x,a(op)x→b,b(op)x→a 2. a(op)b == b(op)a

我在想,答案的分佈將需要均勻。 (10個零,10個等)

請不要用將小數轉爲二進制的方式回答。我特別想幫助或者構建一個表或想出了(一DXOR B)

我覺得DAND和DOR「真理」表應當建立並與DXOR邏輯一致性以及:-)

運算解決方案
+0

現在我想到了它,你可能只能在n位的二進制中做到這一點...但是這只是本質上的二進制 – LeadToGold

回答

1

如果你想關聯,這是不可能的。您沒有列出它,但如果您確實需要關聯性((A DXOR B) DXOR C == A DXOR (B DXOR C)),那麼您正在尋找一個訂單10的阿貝爾組,其中除了身份以外的每個元素都有訂單2.但是,Cauchy's theorem需要任何訂單組10訂單5的一個元素。

如果你不想關聯,這是可行的,但是結果會失去很多XOR的很好的屬性。在這種情況下,你正在尋找一個完全對稱的10階擬羣。我不熟悉擬羣,但是根據Mark Dickinson的建議,我已經構建了一個具有所需屬性的擬羣。這裏的「乘法」表:

x 0 1 2 3 4 5 6 7 8 9 
    ------------------- 
0|2 4 0 3 1 7 9 5 8 6 
1|4 1 3 2 0 9 6 8 7 5 
2|0 3 4 1 2 5 8 9 6 7 
3|3 2 1 0 4 8 7 6 5 9 
4|1 0 2 4 3 6 5 7 9 8 
5|7 9 5 8 6 2 4 0 3 1 
6|9 6 8 7 5 4 1 3 2 0 
7|5 8 9 6 7 0 3 4 1 2 
8|8 7 6 5 9 3 2 1 0 4 
9|6 5 7 9 8 1 0 2 4 3 

我的試驗和錯誤的建造順序5完全對稱擬羣,然後把直接產物,其具有2階產生這種循環羣。在Python中驗證了正確性。由於我對quasigroups知之甚少,我不知道quasigroup是否有更自然的選擇。

+0

謝謝!這聽起來很有權威性,如果令人失望。如果您正在以十進制位實現加密協議,則關聯性非常重要。 – LeadToGold

+0

@LeadToGold:加密不使用名爲''和','或'''xor'的操作,它使用「模塊化乘法」和「模塊化加法」。對於二進制,恰好「模塊乘法」是「和」,「模塊化加法」是「異或」......對於其他基礎中的實現,您應該實現模乘法和模加法(使用有限域的規則),並完全忘記XOR。 –

+1

如果你放鬆結合條件,肯定有解決方案:在這種情況下你要找的是一個完全對稱的擬羣。當然有5個5階擬直子(當然也可以是同構),而在Z/2上的正常運算的直接積可以給10個元素上的完全對稱擬羣。 –

0

作爲「加法模2」返回XOR的根,可以使用加法模10來實現十進制奇偶校驗。這與XOR一樣是關聯和可交換的。而且,模塊化乘法分佈在模塊化的附加部分上,就像AND在XOR上分配一樣。

這看到了真實世界的用途,例如check digits of credit cards use this scheme

與XOR不同的一個重要屬性是儘管模塊化加法是可逆的,但它不是它自己的逆。因此,在翻譯使用XOR的算法時,需要確定模塊加法的位置以及模塊減法的位置。

0

我已經實現了可以稱爲「十進制XOR」的整數掩碼函數。我從二元XOR的數學表示開始。對於兩個二進制值A和B,A XOR B =(2 * B-A)%2。繼續並驗證這是行之有效的。

現在,如果將%2更改爲%10,則可以使用0到9之間的小數值。對於兩個十進制值A和B,A XOR B =(2 * B-A)%10。

這裏的問題在於模數如何實現負值。一個常見的實現是盲目地將A%B轉換爲| A |%| B |。所以,-1%10 = 1%10 = 1.我不想要那個實現。我想要實現這樣的A%B是多少個整數步驟A高於B的下一個最低倍數。對於-1%10,它將是-1-10,因爲-10是下一個10的最低倍數。結果是9.

因爲(2 * B-A)的結果不能小於-9,我所要做的就是檢查:if(R < 0)R + = 10;我遵循:if(R> 9)R- = 10;處理結果大於9的情況(最高可以是18)。

現在,該理論被覆蓋,就可以實現它並看到,如果A XOR B = C使用XOR這個十進制版本,那麼C XOR B = A。我實現了它在幾個不同的語言在http://shaunwagner.com/projects/mask.html