- /*
- 目标:JinZhi10.java 改版
- 因为代码重复,所以可以合在一起。
- */
- import java.util.Scanner;
- class JZX
- {
- public static void main(String[] args)
- {
- Scanner sc = new Scanner(System.in);
- System.out.println("输入一个需要转换的十进制整数");
- int x = sc.nextInt();
- System.out.println("输入2/8/16");
- int j = sc.nextInt();
- System.out.println(x+"转"+j+"进制:"+toJ(x, j).reverse());
- }
- public static StringBuffer toJ(int x, int j){
- int i = 0;
- switch(j){
- case 2:
- i = 1;
- break;
- case 8:
- i = 3;
- break;
- case 16:
- i = 4;
- break;
- default:
- System.out.println("不会转这个进制");
-
- }
- StringBuffer sb = new StringBuffer();
- if(x==0){
- sb.append(0);
- }else{
- while(x!=0){
- int temp = x&(j-1); //取出2进制x的最后i位,用来表示j进制的最后1位
- if(temp>=10){
- sb.append((char)(temp-10+65));//如果取出的4位2进制数比9大,在16进制中用A-F表示,把 temp-10+'A' 后对应的值转为字符型存入字符串缓冲区中
- }else{
- sb.append(temp);
- }
- x = x>>>i; //每次取出后i位,2进制x无符号右移i位,继续判断,直到x的有效位被取光
- }
- }
- return sb; //返回保存的数,输出的时候反转
- }
- }
复制代码 |