• Java实现十进制与二进制互相转换


    前言

    Java有哪些工具类可以实现十进制与二进制之前的转换呢?欲知详情,请看下文分解。

    十进制转二进制

    正整数转二进制

    除2取余,逆序排列,高位补零。

    示例:

    十进制255 = 二进制1111 1111

    计算过程:

    255/2=127=====1
    127/2=63======1
    63/2=31=======1
    31/2=15=======1
    15/2=7========1
    7/2=3=========1
    3/2=1=========1
    1/2=0=========1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    小数转换成二进制

    乘2取整,顺序排列。

    十进制0.625 = 二进制0.101

    计算过程:

    0.625*2=1.25======取出整数部分1
    0.25*2=0.5========取出整数部分0
    0.5*2=1==========取出整数部分1
    
    • 1
    • 2
    • 3

    代码实现

    Java类实现:

    System.out.println(new BigInteger("255", 10).toString(2));
    
    • 1

    自定义实现:

    public static void main(String[] args) {
        System.out.print("输入一个十进制数:");
        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        String result = "";
        for (int i = num; i > 0; i /= 2) {
            result = i % 2 + result;
        }
        System.out.println(result);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二进制转十进制

    小数点前或者整数要从右到左用二进制的每个数去乘以2的相应次方并递增,小数点后则是从左往右乘以二的相应负次方并递减。

    示例:
    二进制数1101.01转化成十进制

    计算过程:

    1101.012=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.2510
    • 1

    代码实现

    Java类实现:

    Integer.parseInt("1111",2);
    
    • 1

    自定义实现:

    public static void main(String[] args) {
        System.out.print("输入一个二进制数:");
        Scanner scanner = new Scanner(System.in);
        int binaryNumber = scanner.nextInt();
        int decimal = 0;
        int p = 0;
    
        while (true) {
            if (binaryNumber == 0) {
                break;
            } else {
                int temp = binaryNumber % 10;
                decimal += temp * Math.pow(2, p);
                binaryNumber = binaryNumber / 10;
                p++;
            }
        }
        System.out.println(decimal);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    BigInteger

    概念

    在Java中,由CPU原生提供的整型最大范围是64位long型整数。使用long型整数可以直接通过CPU指令进行计算,速度非常快。
    如果我们使用的整数范围超过了long型怎么办?

    这里就引入我们要了解的主角BigInteger。

    java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数:

    运用

    如果不借助BigInteger类,当你需要运算9999999999999999的6次方,你敢想吗?或者还又哪些办法

    BigInteger bi = new BigInteger("9999999999999999");
    System.out.println(bi.pow(6));
    
    • 1
    • 2

    结果:

    999999999999999400000000000000149999999999999980000000000000001499999999999999940000000000000001
    
    • 1

    如果在疯狂点?结果是多少?

    BigInteger bi = new BigInteger("999999999999999999");
    System.out.println(bi.pow(999999999));
    
    • 1
    • 2

    BigInteger和Integer、Long一样,也是不可变类,并且也继承自Number类。因为Number定义了转换为基本类型的几个方法:

    转换为bytebyteValue()
    转换为shortshortValue()
    转换为intintValue()
    转换为longlongValue()
    转换为floatfloatValue()
    转换为doubledoubleValue()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过上述方法,可以把BigInteger转换成基本类型。如果BigInteger表示的范围超过了基本类型的范围,转换时将丢失高位信息,即结果不一定是准确的。如果需要准确地转换成基本类型,可以使用intValueExact()、longValueExact()等方法,在转换时如果超出范围,将直接抛出ArithmeticException异常。

    在这里插入图片描述

    点赞 收藏 关注
    吾人只有进德与修业,这二事靠得住

  • 相关阅读:
    Mathorcup数学建模竞赛第四届-【妈妈杯】C题:家庭暑假旅游套餐的设计(附MATLAB和SAS代码)
    高项 成本管理论文
    Unity地面交互效果——4、制作地面凹陷轨迹
    六、《图解HTTP》一些关于Web的攻击手段
    在springboot中实现WebSocket协议通信
    Jenkins流水线变量运算
    React +AntD + From组件重复提交数据(已解决)
    Java中的抽象类和接口的区别
    HTML--标签
    【数据结构与算法】栈与队列相关算法的实现
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/127429984