黑马程序员技术交流社区
标题:
关于进制转换程序
[打印本页]
作者:
周博文
时间:
2015-7-11 21:13
标题:
关于进制转换程序
前两天在论坛看到一个同学编写了进制转换程序,在看懂他的代码之后,我自己进行了修改,并且添加了详细的注释,希望能和大家交流一下。
/*
需求:用户输入一个十进制的数和想要转换的进制,
输出转换后的结果
分析:十进制转换成 2 8 16进制的方式:
二进制:
number >>> 0 & 1(2-1) --> 2的0次方位
number >>> 1 & 1(2-1)--> 2的1次方位
...
八进制:
number >>> 0 & 7(8-1)--> 8的0次方位
number >>> 3 & 7(8-1)--> 8的1次方位
十六进制:
number >>> 0 & 15(16-1)--> 16的0次方位
number >>> 4 & 15(16-1)--> 16的1次方位
由于2,8,16进制的某一位的值最大为 16,且规定用户输入的数据
不超过int的最大范围 32 位,所以用一个byte[32] result来存储
转换后的值
步骤:编写一个方法:用于将一个十进制整数转换为2,8,16进制的值
返回值类型: char[] result
参数列表: int number 用户输入的十进制数
int target 用户要进行转换的目标进制(2,8,16中的一种)
1.定义一个char[] search = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}
用于采用查表法确定转换后每一位十进制数对应的其他进制的值
2.定义一个整数用于存储进制转换所需要移位的次数,根据进制不同赋予不同的值(二进制1,八进制3,十六进制4)
int moveNum;
3.target - 1为 进行&运算需要的值
4.循环对number进行转换,每次循环取得转换后的值其中一位,从最低位开始
循环结束条件:当number 移位后的值为0
用变量记录结束循环时的数值
*/
import java.util.Scanner;
class ConvertDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个十进制整数:");
int number = sc.nextInt();
System.out.println("希望将该整数转换为的进制是(2,8,16):");
int target = sc.nextInt();
char[] result = convert(number, target);
int end = 0;
while (result[end] != '\n'){
end++;
}
//由于返回的数组为结果的逆序,故应该逆序打印出结果
for (int i=end-1; i>=0 ; i--){
System.out.print(result[i]);
}
System.out.println();
}
public static char[] convert(int number, int target){
//定义一个char数组用于存储转换后的结果
char[] result = new char[32];
//定义一个数组用于查找各个位对应的转换后的值
char[] search = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
int moveNum = 0;
int baseNum = target - 1;
switch (target){
case 2:
moveNum = 1;
break;
case 8:
moveNum = 3;
break;
case 16:
moveNum = 4;
break;
default:
System.out.println("该程序仅用于将十进制转换为二,八,十六进制");
break;
}
int location = 0;
do{
result[location] = search[number & baseNum];
number = number >>> moveNum;
location++;
}
while (number != 0);
//用于判断转换后数值的结尾
result[location] = '\n';
return result;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2