制表法将十进制转换为其他进制

/*
控制台输入十进制数,及需转换到的进制,一般是二进制、八进制、
十六进制数。
输入输默认为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);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值