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;
}
}