配列による十進数の各種進数への変換
3766 ワード
主にチャート法を用いてデジタル変換を行い,一つの配列に非十進法の各種記号を格納し,各ビット数を「与」操作で取り出してチャートで変換した文字を取り出して別の配列に格納し,最後にこの配列の内容を印刷してデジタル変換を完了した.
上記のプログラムでは10進数から2進数に変換する機能を実現しており、AND操作+右シフト操作で正負数を区別せずに変換でき、負数変換の結果も正しい.同じ理屈で10進数から16進数に転換する方法が得られる.
この2つのプログラムから,2つの関数の数値変換の主な部分の操作は基本的に同じであることが分かったので,同じ部分を抽出して1つの関数に書き,この関数で様々な数値の変換を実現することができる.変換関数の入力:
最終的には、次のように変換されます.
public static String toBin(int num)
{
//
char[] chs = {'0','1'};
// , 4 , 32 bit
char[] arr = new char[32];
//pos arr , 。
int pos = arr.length;
String s = new String();
if(num == 0)
return "";
while(num != 0)
{
// , 1 arr , arr
int temp = num & 1;
// --pos pos , “ ”,
// pos length-1, 0 !
arr[--pos] = chs[temp];
num = num >>> 1;
} for(int i = pos;i
上記のプログラムでは10進数から2進数に変換する機能を実現しており、AND操作+右シフト操作で正負数を区別せずに変換でき、負数変換の結果も正しい.同じ理屈で10進数から16進数に転換する方法が得られる.
public static String toHex(int num)
{
//
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
// , 4 , 32 bit
char[] arr = new char[32];
//pos arr , 。
int pos = arr.length;
String s = new String();
if(num == 0)
return "";
while(num != 0)
{
// , 1 arr , arr
int temp = num & 15;
// --pos pos , “ ”,
// pos length-1, 0 !
arr[--pos] = chs[temp];
num = num >>> 4;
}
for(int i = pos;i
この2つのプログラムから,2つの関数の数値変換の主な部分の操作は基本的に同じであることが分かったので,同じ部分を抽出して1つの関数に書き,この関数で様々な数値の変換を実現することができる.変換関数の入力:
/*
* ,base ,2 1,8 7,16 15;
* offset ,2 1,8 3,16 4
*/
public static String trans(int num,int base,int offset)
{
//
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
// , 4 , 32 bit
char[] arr = new char[32];
//pos arr , 。
int pos = arr.length;
String s = new String();
if(num == 0)
return "";
while(num != 0)
{
// , 1 arr , arr
int temp = num & base;
// --pos pos , “ ”,
// pos length-1, 0 !
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int i = pos;i }
return s;
}
最終的には、次のように変換されます.
/*
* 8
*/
public static String toOx(int num)
{
return trans(num,7,3);
}
/*
* 2
*/
public static String toOx(int num)
{
return trans(num,1,1);
}
/*
* 16
*/
public static String toOx(int num)
{
return trans(num,15,4);
}