10進数を16進数に変換

1656 ワード

16進数の要素の個数は固定して、しかも対応する番号があって、ルックアップ法を使うことができます.1つのintタイプの10進数は32ビットオペレーティングシステムで4バイトを占め、32ビットの2進数はその低い8ビットを取り、例えば60はメモリに2進数0011 1100で格納され、1つの16進数の各ビット数は2進数の4ビット数に対応し、したがって,10進数とFを「(&)」と演算して4桁低い値を得ることができる.(16進数の最下位ビット)を左に4ビット移動してFと演算を続け、16進数のすべてのビット数を導出した後、最下位から最上位までのすべての数を格納する配列が存在し、順序が逆であるため、出力時にゼロ逆に接頭辞0 x出力を加えるべきである.
class ArraytoHex {
	public static void main(String[] args) {
		int num = 60;
		String str_hex = toHex(num);
		System.out.println(str_hex);
	}

	/*
	 *   :           :           ,        ,      .  int  
	 *      32       4   ,32 2       8 ,  60,          0011
	 * 1100  ,                   4  ,           F  “ (&)”  ,     (         ),
	 *     4    F   ,            ,         ,      
	 */
	public static String toHex(int num) {
		// 1.  
		char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		// 2.           8       
		char[] arr = new char[8];
		// 3.                   
		int index = arr.length;
		// 4.     num  &F,>>>4   
		while (num != 0) {
			// 5. num  &            
			int temp = num & 15;
			// 6.  &      ,    ,         ,          
			arr[--index] = chs[temp];
			// 7. num    ,     
			num = num >>> 4;
		}
		// 8.    ,           
		return "0x" + toString(arr, index);
	}

	// 9.      ,         
	public static String toString(char[] arr, int index) {
		String temp = "";
		for (int x = index; x < arr.length; x++) {
			temp = temp + arr[x];
		}
		return temp;
	}
}