轉換為正整數 一些進製轉換演算法的原理與證明

2021-10-14 17:37:49 字數 2157 閱讀 1244

包括特殊情況直接轉換, 位權相加法, 短除法, double-dabble演算法.

考慮乙個 n 位的 w 進製正整數 x , 令

用遞迴表示就是:

再考慮 x 在 k 進製表示下的分解, 和上面一樣, 即:

上式用遞迴表示就是:

其中 是 x 在 k 進製下第 i 位的數碼, g 是 x 在 k 進製表示下的位數.

而進製轉換演算法就是已知

欲求 .

特殊情況直接轉換

如果 w 進製和 k 進製對正整數 n 滿足

, 可以得知:

我們可以預先求出

在w進製下的表示

. 由於

至多有 k 種取值, 將

轉換為

的過程非常簡單 (如通過乙個項數為 k 的查表) . 轉換後將得到:

乙個 n 位的 w 進製數剛好可以表示

到 的自然數, 而 1 位 k 進製數剛好可以表示

到 位數. 因此由

可知, 1 位的 k 進製數將剛好對應 1 個 n 位的 w 進製數。即

是乙個 n 位的 w 進製數:

這裡為了與

區分, 用

表示 k 進製下第 n 個

對應的

的第 q 位. 最後得出:

也就是說每位

剛好對應 n 位

.位權相加法

已知 欲求

, 最直接的辦法就是在 k 進製下直接計算:

或:短除法

由 可以知道:

其中 是求餘數符號.

所以也能通過計算

這一過程求得

, 其中

是向下取整符號.

double-dabble演算法

double-dabble 演算法的實現可參考上圖. 通常所說的 double-dabble 演算法是指二進位制轉十進位制的 double-dabble 演算法 (如上圖那樣) , 所以下面先討論二轉十的 double-dabble 演算法:

關於 double-dabble 演算法, 其原理是直接在k進製下計算計算

來求得

的. 但硬體實現上, 二轉十的 double-dabble 演算法使用了「邏輯左移 (所有bit左移一位) 」與「滿5加3」電路模組實現 bcd 碼下的

運算 (對於二進位制轉十進位制).

具體而言, 「滿5」判斷的是當前十進位制位

後是否會產生十進位制進製, 因為

. 「加3」則是為了將左移後的資料修正為十進位制 (8421bcd 碼表示) 下

後的正確結果.

這裡再討論實現中的一些細節:

對乙個十進位制數

顯然至多導致到下一位的進製, 而不會繼續傳遞下去, 所以「滿5加3」器可以每4位單獨處理.

對於 8421bcd 碼, 進行

後, 在處理進製前, 每位 8421bcd 碼都應該是乙個偶數, 所以每位 8421bcd 碼的最低位必然是 0 .

如果上一位產生了進製, 只需要將其對應的最低位設定為 1 即可, 對於每次迭代引入的

, 則只需要設定到最低位的 8421bcd 碼的最低位即可.

在整個迭代週期中, 所有「滿5加3」模組顯然都只可能接受 8421bcd 碼的輸入. 顯因為然在整個演算法迭代過程中,

一直都是保持以 8421bcd 碼的形式表示的.

由於「滿5加3」只可能接受 8421bcd 碼的輸入, 即只可能有 0~9 共 10 種輸入情況. 也可以使用查表法而不是加法器來實現「滿5加3」.

double-dabble 演算法是顯然可逆的, 二進位制轉十進位制的 double-dabble 演算法過程的逆過程就是十進位制轉二進位制的演算法 (double-dabble 演算法的逆過程類似短除法) .具體而言, 就是將所有的「滿5加3」模組替換為「滿8減3」模組, 然後將所有模組的輸入和輸出對調即可.

這裡我只討論了正整數的進製轉換演算法, 但是小數情況其實也差不多. 另外, double-dabble演算法也只討論了二進位制和十進位制的情況, 但顯然它可以推廣到其它情況.

除此之外就是演算法的時間開銷, 空間開銷, 電路面積開銷的分析.

以後有空就把這些也寫了, 這些就先留給讀者吧!

轉換為正整數 進製之間的轉換

作者 周競文 jwzhou nudt.edu.cn 轉換方法 除二取餘法 以 37 為例,除二取餘方法過程如下 左邊是豎式形式 右邊是文字描述 得 37 10 100101 2。轉換方法 乘二取整法 以 0.71875 為例,乘二取整方法過程如下 左邊是豎式形式 右邊是文字描述 得 0.71875 ...

正整數的任意進製轉換

描述 將 p 進製 n 轉換為 q 進製。p 和 q 的取值範圍為 2,36 其中,用到的數碼按從小到大依次為 0,1,2,3,4,5,6,7,8,9,a,b,z,不考慮小寫字母。輸入一共1 m 行 第1行為 m,表示後面有 m 行 1 m 60 其後的m行中,每行3個數 進製p,p進製數n,以及進...

正整數的任意進製轉換

時間限制 1 sec 記憶體限制 128 mb 題目描述 將 p 進製 n 轉換為 q 進製。p 和 q 的取值範圍為 2,36 其中,用到的數碼按從小到大依次為 0,1,2,3,4,5,6,7,8,9,a,b,z,不考慮小寫字母。輸入一共1 m 行 1行為 m,表示後面有 m 行 1 m 60 其...