包括特殊情況直接轉換, 位權相加法, 短除法, 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 其...