刚刚进入Java,看的是教学视频,为了巩固一下所学,便顺手写了一个程序,虽然Java有提供自动转换,但是作为新手练习练习一下
大致思路:先进行“与运算”,再右移,如此循环往复
以十进制—->十六进制为例
十进制60转十六进制为3C
第一步:先与运算:&15
0000-0000 0000-0000 0000-0000 0011-1100 —->60
& 0000-0000 0000-0000 0000-0000 0000-1111 —->15
—————————————————————
0000-0000 0000-0000 0000-0000 0000-1100 —->12 (就是C)
第二步:再右移4位:>>>4 (因为4个二进制位==1个十六进制位)
0000-0000 0000-0000 0000-0000 0000-0011 —->3
第三步:再与运算:&15
0000-0000 0000-0000 0000-0000 0000-0011 —->3
& 0000-0000 0000-0000 0000-0000 0000-1111 —->15
—————————————————————
0000-0000 0000-0000 0000-0000 0000-0011 —->3
————————————————————-结果:3C————————————————————-
总结:
十进制—->二进制:&1 and >>>1 and &1 ……(循环)
十进制—->八进制:&7 and >>>3 and &3 ……(循环)
十进制—->十六进制:&15 and >>>4 and &4 ……(循环)
运行结果:
import java.util.Scanner;
public class trans
{
public static void main (String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个十进制数");
int num=sc.nextInt();
System.out.print("二进制是:\t");
toBinary(num);
System.out.print("八进制是:\t");
toOcta(num);
System.out.print("十六进制是:\t");
toHex(num);
}
//十进制转二进制
public static void toBinary(int num)
{
trans(num,1,1);
}
//十进制转八进制
public static void toOcta(int num)
{
trans(num,7,3);
}
//十进制转二进制、八进制、十六进制
public static void toHex(int num)
{
trans(num,15,4);
}
//十进制转二进制、八进制、十六进制
public static void trans(int num,int mode,int offset)
{
char[] tran={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] arr=new char[32];
//记录位置
int pos=arr.length;
while (num!=0)
{
int temp=num& mode;
//从数组后面开始存,逆序存储
arr[--pos]=tran[temp];
num=num>>>offset;
}
for (int x=pos;x<arr.length;x++)
System.out.print(arr[x]);
System.out.println();
}
}