前两天在论坛看到一个同学编写了进制转换程序,在看懂他的代码之后,我自己进行了修改,并且添加了详细的注释,希望能和大家交流一下。- /*
- 需求:用户输入一个十进制的数和想要转换的进制,
- 输出转换后的结果
- 分析:十进制转换成 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;
- }
- }
复制代码
|
|