黑馬程式設計師 查表法解決進製轉換

2021-06-21 12:36:38 字數 2856 閱讀 1486

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

本文將用程式**分析如何將十進位制轉換為二進位制,八進位制,十六進製制。

首先,分析一下進製轉換的方法。

一、十進位制轉換為二進位制:

轉換方法:十進位制整數轉換為二進位制整數採用"除2取餘,逆序排列"法。具體做法是:用2整除十進位制整數,可以得到乙個商和餘數;再用2去除商,又會得到乙個商和餘數,如此進行,直到商為0時為止,然後把先得到的餘數作為二進位制數的低位有效位,後得到的餘數作為二進位制數的高位有效位,依次排列起來。

舉例:給定十進位制數「173」,轉換為二進位制數

程式實現:

public static string tobinary(int num)

return sb.reverse().tostring();

}

二、十進位制轉換為八進位制

轉換方法:與二進位制類似,只是八進位制的基數為8,除8取餘。把上圖中的2換成8,可計算得出173的八進位制值為「255」。

程式實現:

public static string toba(int num)

return sb.reverse().tostring();

}

三、十進位制轉換為十六進製制

轉換方法:同上。只是十六進製制有乙個特殊,十六進製制數總共有:0~15,逢十六進1。但是大於9的數,不能用數字表示,要用字母表示。10~15對應的是a、b、c、d、e、f。所以在使用十進位制數除16時,如果餘數大於9,那麼就轉換成字母。該轉換方法為:(餘數-10 + 'a')。

程式實現:我們分析得知,整型資料(int)是32位的。每一位十六進製制數用4個二進位制位表示,所以十進位制轉換為十六進製制只需轉換八次。num%16等價於num&15,num/16等價於num>>>4(右移四位),如下面的程式。

public static string tohex(int num)else

num = num >>> 4; //無符號右移四位

} sb = sb.reverse(); //字串反轉操作

/*while迴圈去掉前面的0,例如:十進位制的100,

轉換成十六進製制為「00000064」,經過這個while迴圈處理得到「64」。

從左到右去零,直到碰到乙個非0.

*/while(sb.length() > 0)else

} return sb.tostring();

}

通過分析,我們發現,與十六進製制的轉換類似,十進位制轉換為二進位制時,(num%2)等價於(num&1),(num/2)等價於(num>>>1)。十進位制轉換八進位制時,(num%8)等價於(num&7),(num/8)等價於(num>>>3)。所以,等到如下程式:

轉二進位制:

public static string tobinary2(int num)

return sb.reverse().tostring();

}

轉八進位制:
public static string toba2(int num)

return sb.reverse().tostring();

}

我們發現上面程式中得出的結果都是反向的,必須使用stringbuffer的reverse方法進行轉換。下面來進行優化一下。

上面程式中,我們直接使用了stringbuffer作為儲存容器,下面我們使用另外乙個容器——陣列,來儲存資料。要保證出來的結果不是反向的,我們要將指標定位在陣列的末尾,逐一往前儲存。使用查表法將上面的程式優化如下:

/**

* 使用查表法實現十進位制轉換成二進位制,八進位制,十六進製制的操作。

* @author anjadeluo

* */

public class decimalconversion3 ;

/*** 進製轉換。輸入乙個整數和轉換方式,轉換不同的進製

* @param num:待轉換的數

* @param symbol:轉換方式(二進位制-2,八進位制-8,十六進製制-16)

* @return (返回對應進製數的字串)

*/public static string to***(int num ,int symbol) }

/*** 進製轉換的共通函式

* @param num:待轉換的十進位制數

* @param base:基數(二進位制-1;八進位制-7;十六進製制-15)

* @param offset:偏移量(二進位制-1;八進位制-3;十六進製制-4)

*/public static string trans(int num ,int base ,int offset)

char arr = new char[32]; //定義乙個陣列

int pos = arr.length; //定義乙個指標變數,用於指示進製數存放在陣列中的位置,為了保證出來的結果非反向的,我們需要從陣列末尾開始儲存,所以指標定位在陣列末尾。

while(num != 0)

while(pos < arr.length)

return sb.tostring();

} public static void main(string args)

}

---------------------- 

asp.net+unity開發、

.net培訓、期待與您交流! ----------------------

詳細請檢視:

Java 查表法進製轉換

public class formattrans 雙重引用,這樣再呼叫時就不用再填base offset值,只需寫num 待轉化的數 public static void tobin int num public static void tohex int num public static voi...

黑馬程式設計師 型別轉換

一 隱式轉換,從型別a到型別b的轉換可以在所有情況下進行,執行轉換的規則非常簡單,可以讓編譯器執行轉換。參與運算 算數運算和賦值運算 的運算元和結果型別必須一致。當不一致時,如兩種型別相容且目標型別大於原型別時,系統自動完成型別轉換,在自動轉換中是不會丟失精度的。二 顯式轉換,從型別a到型別b的轉換...

黑馬程式設計師 型別轉換

每個函式都可以強制將乙個表示式轉換成某種特定資料型別。自動 隱式 型別轉換不會導致資料丟失。資料型別在資料結構中的定義是乙個值的集合以及定義在這個值集上的一組操作。變數是用來儲存值的所在處 它們有名字和資料型別。變數的資料型別決定了如何將代表這些值的位儲存到計算機的記憶體中。在宣告變數時也可指定它的...