给定一个十进制整数,如何转成二进制形式?如何转成十六进制形式——Java

十进制转二进制

(1)十进制,十进制顾名思义就是逢十进一 比如 0 1 2 3 4 5 6 7 8 9这时再加一个数就到十了 所以下一个数进一位就是10.
(2)二进制就是逢二进一 比如0 1 10 11跟十进制的道理一样。
(3)二进制与十进制之间的相互转换的规则就是 二进制数从右向左第一位乘以二的零次方第二位数乘以二的一次方向左依次递增最后做个累加。
(4)十进制转二进制则是把十进制数拆解成二的倍数的和然后按位把一与零进行组合 比如100=64+32+4+2等于2的六次方+2的五次方+2的平方 等于110010.

十进制转十六进制

(1)十六进制顾名思义就是逢十六进一,这时你就会很疑惑数字只有0-9十个,十六个数字怎么办。在十六进制中是这样的0 1 2 3 4 5 6 7 8 9 A B C D E F所以每当遇到F再加一就要向前进一位。
(2)十进制如何向十六进制转换呢,同样的道理 把十进制数展开成十六倍数的和然后跟二进制一样的做法。
(3)那我们如何将十六进制的数转换成十进制呢,这跟二进制一样从右向左第一位乘十六的零次方第二位乘十六的一次方。这样就完成了十六进制向十进制的转换。

编程实现10进制 转 2进制

方法一

在java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转换。

public static void main(String[] args) 
{
        //十进制转换为二进制
        System.out.println(Integer.toBinaryString(10));
}

方法二

通过求余,求商,并计算值(例如:把二进制的1010 直接输成十进制的1010)
但是这种方法存在一个问题:因为int类型是有取值范围的,如果转换的二进制数字超出了范围(例如:10011100110110)这个数字明显超出了int的取值范围,这样我们用int类型的sum进行存储的时候他就会自动转换为一个其他的数字。并且这个方法没有办法求负数的二进制数。

public static void main(String[] args) 
{
        int a = 123;//定义一个变量并赋给他一个十进制的值
        int remainder;//定义一个变量用于存储余数
        int sum = 0;//定义一个变量用于存放和
        int k = 1;//定义一个变量控制位数

        while(a != 0){

        remainder = a % 10;//对目标数字求余
        a /= 2;//对目标数字求商
        sum = sum + remainder * k;//求和
        k *= 10;//改变位数
        }
        System.out.println("10进制的123转换为2进制结果为:" + sum );
    }

方法三

在方法二的基础上使用字符串对结果集进行存储,便可以很好的解决int类型的越界问题,能解决所有的十进制转换二进制的问题。

public static void main(String[] args)
 {
        int n = -10;
        String result = "";
        boolean minus = false;
        //如果该数字为负数,那么进行该负数+1之后的绝对值的二进制码的对应位取反
        //然后将它保存在result结果中
        if(n < 0)
        {
            minus = true;
            n = Math.abs(n + 1);
        }
        while(true)
        {
            int remainder = (!minus && n % 2 == 0) || (minus && n % 2 == 1) ? 0 : 1;
            //将余数保存在结果中
            result = remainder + result;
            n /= 2;
            if(n == 0)
            {
                break;
            }
        }
        //判断是否为负数,如果是负数,那么前面所有位补1
        if(minus)
        {
            n = result.length();
            for(int i = 1; i <= 32 - n; i++)
            {
                result = 1 + result;
            }
        }
        System.out.println(result);
    }

编程实现10进制 转 16进制

方法一

在算法中使用StringBuffer效率更好,但是String类型的相加效率并不高,所以这个时候就要考虑StringBuffer里面的append()这个方法~
append() 指将char参数的字符串表示形式追加到此序列;
reverse() 指将字符序列用其反转形式取代;
toString() 指返回此序列中数据的字符串表示形式;

package com.succez.task2;
import java.util.Scanner;

public class intToHex_Alter 
{
    public static void main(String[] args) 
    {
        System.out.println("请输入要转换的十进制的数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();        
        System.out.println("转换的十六进制的数为:"+intToHex(n));
    }
    private static String intToHex(int n) {
        //StringBuffer s = new StringBuffer();
        StringBuilder sb = new StringBuilder(8);
        String a;
        char []b = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        while(n != 0)
        {
            sb = sb.append(b[n%16]);
            n = n/16;            
        }
        a = sb.reverse().toString();
        return a;
    }
}

方法二

直接调用封装好的函数

Integer x = 666;
String hex = x.toHexString(x);
System.out.println(hex);

打印出来的信息是“29a”
注意:这里转换完的hex是字符串,值是16进制的一个数;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值