我將假設您正在基於s
的某個整數s > 0
,並且您試圖以某個固定整數n > 0
來模擬s^(n+1)
。換句話說,最多使用n+1
地方(或數字)。
所以,你代表了該系統的序列[xn ... x0]
,每一個xi
是0
和s-1
之間的數字的整數。例如,如果s=3
和n=4
,表示[01201]
將對應於十進制數0*3^4 + 1*3^3 + 2*3^2 + 0*3^1 + 1*3^0 = 27 + 18 + 1 = 46
。
一般來說表示的十進制值以上將是:
x = xn*s^n + ... + x0*s^0
現在,你的問題在於找到-x
模s^(n+1)
(請記住,我們只能用s+1
「數字」的表示
定義,每一個數字xi
其補充到s
爲
c(xi) = s - 1 - xi
請注意,在二進制情況下,當s=2
時,與2
的互補符合相同的定義。還要注意,
xi + c(xi) = s - 1 eq(1)
現在讓我在這裏用一個簡單的符號,並呼籲yi = c(xi)
。然後序列
y = [yn ... y0]
就是我們可以稱之爲的補充的x
s
。它也代表-x - 1
模塊s^(n+1)
,因此獲得-x
您只需將1
添加到y
即可。例如在x=[01201]
的情況下,我們將有y=[21021]
,因爲在每個位置的數字總和爲3-1=2
。
原因很簡單:
[yn ... y0] + [xn ... x0]
= yn*s^n + ... + y0*s^0 + xn*s^n + ... + x0*s^n
= (yn+xn)*s^n + ... + (y0+x0)*s^0
= (s-1)*sˆn + ... + (s-1)*s^0 ; by eq(2)
= s^(n+1) + ... + sˆ1 - (s^n + ... + s^0)
= s^(n+1) - 1
= -1 modulo s^(n+1)
所以,同樣的事情工作,因爲他們是如何工作的時候s=2
,並說,模2^32
(32位)。從這個意義上說,二進制情況沒有什麼特別之處。
太棒了......那很完美! – DarthRubik