代码实现十进制与其他进制之间的转换

众所周知,计算机底层都是用二进制数做运算,但我们生活中用到的最多的却是十进制,当然还有八进制与十六进制。日常生活中进行进制转换时,都是一些繁琐重复的过程,现在,我们可以用JAVA语言中最原始的代码实现这一功能!
在看代码之前,我们先来看看进制的基本概念。

  ****二进制****
  二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

  ***八进制***
 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。

 ***十六进制***
 十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。

进制转换的方法

十进制—>二进制
对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”。

十进制—>八进制
10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。

十进制—>十六进制
10进制数转换成16进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成16。

了解了基本概念与思想后,现在就来看看如何用最原始的代码实现上述功能吧!

/*
十进制转换为二进制、八进制、十六进制
1、思路:1、建立一个十六进制的字码表,用数组表示,数组的脚标刚好对应每个元素值
         2、每次除以被转数的基数取余数,相当于每次和1、7或15做与运算,之后做右移1、3或4位动作,依照此过程重复进行,直到被转换数为零
         3、每次得出的值存放到一个数组中
         4、对数组进行翻转遍历即可得出被转换后的数值

*/
class  Switch
{
    public static void main(String[] args)
    {

        toHex(60);//输出3C
    }

//十进制转换为二进制
    public static void toBin(int num)
    {
        trans(num,1,1);
    }
//十进制转换为八进制
    public static void toOctal(int num)
    {
        trans(num,7,3);
    }
//十进制转换为十六进制
    public static void toHex(int num)
    {
        trans(num,15,4);
    }
//定义一个通用的转换方法
    public static void trans(int num,int base,int move)
    {
        int temp = 0;
//定义一个临时存放数组
        char arr[] = new char[32];
        int post = arr.length;
//定义一个字码表
        char array[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            while (num != 0)
            {
                temp = num & base;
                num = num >>> move;
                arr[--post] = array[temp];
            }
            for (int j = post;j < arr.length ; j ++)
        {
                    System.out.print(arr[j]);   
        }
    }
}

Ps:代码中如有错误,欢迎各位指正!谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值