——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
需求:将十进制转化为二进制、八进制、十六进制
思路:
1.编写一个函数,参数包括:要转化的数据、基数和移位数,对该函数重载得到二进制、八进制和十六进制的函数。
2.循环地通过&和>>>运算得到不同进制数位上的数,用容器或数组存储。使用容器类
StringBuffer的函数append()存储数位上的数,reverse()来倒序;也可以使用数组和指针依次
存储数位上的数
4.打印出转换了进制后的数
方法一、使用容器存储数位上数的函数,步骤:
1循环地通过&和>>>运算得到转换进制后数位上的数,循环条件是&运算后的数不为零
2用StringBuffer类的函数append()存储,用reverse()来倒序
public static void toBin1(int x) //十进制转换为二进制的重载函数
{
trans1(x,1,1);
}
public static void toOct1(int y) //十进制转换为八进制的重载函数
{
trans1(y,7,3);
}
//用容器StringBuffer实现进制转换
public static void trans1(int num, int base, int offset)
{
StringBuffer ab = new StringBuffer();
while(num != 0)
{
int kk = num&base; //取出num中数的后base位
ab.append(kk);
num = num>>>offset; //num向右移动offset位
}
System.out.println(ab.reverse());
}
方法二、使用数组存储数位上数的函数,步骤:
1建立一个符号表数组cc,和另外一个数组arr,用于存储转换进制得到的字符串
2每一次&base的值作为索引去查符号表,将查到的符号存储在arr中
3循环条件是数字每次右移几位,直到该数为零
public static void toBin2(int x) //十进制转换为二进制的重载函数
{
trans2(x,1,1);
}
public static void toOct2(int y) //十进制转换为八进制的重载函数
{
trans2(y,7,3);
}
public static void trans2(int num, int base ,int offset)
{
char[] cc = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //建立一个符号表
char[] arr = new char[32]; //int型数据最多占用4个字节32位
int pos = arr.length;
while(num != 0)
{
int ab = num & base;
arr[--pos] = cc[ab]; //倒序存储
num = num >>>offset;
}
//打印转换后的数
for(int i = pos; i <arr.length; i++) //正序打印
{
System.out.print(arr[pos]);
}
System.out.println();
}
验证:
public static void main(String[] args)
{
toBin1(10);
toOct1(10);
toBin2(10);
toOct2(10);
}
结果如下
两种方法的验证的结果不一样,我没找到原因,请大神指点指点!