2016-09-24 41 views
0

假設我有一個系統,有整數在mod n工作。所以用我的整數加1到n-1實際上等於零。2s恭維一般形式

假設你進一步定義了一個數字的二進制補碼,當它被添加到它自己的數字等於零時。那就是:

x + C(x) = 0 (here C(x) is the twos compliment of x) 

什麼一般我應該做些什麼來得到兩個x的讚美?

真正的問題:

如果x是二進制一些我可以顛倒所有x的位,然後添加一個到該號碼。

如果x是一個三元數字,這會有點棘手。問題在於它不匹配偶數位,所以你會嘗試翻轉2/3位或者其他的東西,我沒有任何線索指出物理意義。

所以我的問題是這樣的:我怎樣才能把這兩個人的一些任意的基礎稱作?

回答

1

我將假設您正在基於s的某個整數s > 0,並且您試圖以某個固定整數n > 0來模擬s^(n+1)。換句話說,最多使用n+1地方(或數字)。

所以,你代表了該系統的序列[xn ... x0],每一個xi0s-1之間的數字的整數。例如,如果s=3n=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 

現在,你的問題在於找到-xs^(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] 

就是我們可以稱之爲的補充的xs。它也代表-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位)。從這個意義上說,二進制情況沒有什麼特別之處。

+0

太棒了......那很完美! – DarthRubik