/*
控制台输入十进制数,及需转换到的进制,一般是二进制、八进制、
十六进制数。
输入输默认为int 型,包括负数的转换;
思路:
输入的int 计算机会转换为32位二进制数计算
例如: 输入60
计算机: 0000-0000 0000-0000 0000-0000 0011-1100
转换为十六进制: &15无符号右移4位 直到为0
&15: 0000-0000 0000-0000 0000-0000 0011-1100
& 0000-0000 0000-0000 0000-0000 0000-1111
= 0000-0000 0000-0000 0000-0000 0000-1100 =12
查表 12为 c
右移运算: 0000-0000 0000-0000 0000-0000 0000-0011 | -1100
再&15: 0000-0000 0000-0000 0000-0000 0000-1111
= 0000-0000 0000-0000 0000-0000 0000-0011 =3
查表为3
下一次右移之后原数为0,不做运算
所以 60 的 十六进制数为 3c
二进制& 上 1 右移一位
八进制& 上 7 右移三位
计算方法一样
*/
import java.util.Scanner;
class JinZhiZhuanHuan
{
public static void main(String[] args)
{
Scanner sca=new Scanner(System.in);
System.out.println("输入需要转换的十进制数:");
int s=sca.nextInt();
System.out.println("输入需要转到的进制数:");
int j=sca.nextInt();
toTwoEH(s,j);
}
//制表法求十进制转换为二,八,十六进制
public static void toTwoEH(int s,int j){
//定义查询数组Biao 存储数组 arr
char[] Biao={'0','1','2','3','4','5','6',
'7','8','9','a','b','c','d','e','f'};
char[] arr=new char[32];
int ys = s; //保存原数
int x=arr.length; //获取数组长度,方便输出
String string=""; //定义字符串接受输出数
int temp=0; // 中间变量
//判断输入的要转到的进制是否正确,若不正确输出提示,如果
//正确根据输入进制确定右移量和&运算的值
int y=0,z=0; //y:右移量 z: &运算的值
boolean b==false; //判断进制是否输入正确
if(j==2){y=1;z=1;b=true;}
else if(j==8){y=3;z=7;b=true;}
else if (j==16){y=4;z=15;b=true;}
else
{
System.out.println("您输入的进制不合适,产生错误");
}
//如果输入进制正确进行计算
if(b){
while(s!=0){
temp=s & z;
arr[--x]=Biao[temp];
s=s>>>y;
}
//运算后转化为字符串存储
for(int i=x;i<arr.length;i++){
string=string+arr[i];
}
//输出字符串
System.out.println(ys+"的"+j+"进制数为: "+string);
}
}
//制表法十进制转换16进制,优化版
public static void toHex(int s){
//定义查询数组Biao 存储数组 arr
char[] Biao={'0','1','2','3','4','5','6',
'7','8','9','a','b','c','d','e','f'};
char[] arr=new char[8];
int ys=s; // 保存输入的数
int x=arr.length;
String string=""; // 转换为字符串输出
while(s!=0){
int temp=s & 15; //
arr[--x]=Biao[temp];
s=s>>>4;
}
for(int i=x;i<=arr.length-1;i++){
string=string+arr[i];
}
System.out.println("原数"+ys+"的十六进制数为:0x"+string);
}
//制表法求十进制转换为二进制
public static void toTwo(int s){
char[] Biao={'0','1'};
char[] arr=new char[32];
int ys = s;
int x=arr.length;
String string="";
int temp=0;
while(s!=0){
temp=s & 1;
arr[--x]=Biao[temp];
s=s>>>1;
}
for(int i=x;i<arr.length;i++){
string=string+arr[i];
}
System.out.println(ys+"的二进制数为: "+string);
}
}