当前位置: 首页 > news >正文

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

目录

  • 前言
  • 十进制转二进制
    • 正整数转二进制
    • 小数转换成二进制
    • 代码实现
  • 二进制转十进制
    • 代码实现
  • BigInteger
    • 概念
    • 运用

前言

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

小数转换成二进制

乘2取整,顺序排列。

十进制0.625 = 二进制0.101

计算过程:

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

代码实现

Java类实现:

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

自定义实现:

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);
}

二进制转十进制

小数点前或者整数要从右到左用二进制的每个数去乘以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

代码实现

Java类实现:

Integer.parseInt("1111",2);

自定义实现:

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);
}

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));

结果:

999999999999999400000000000000149999999999999980000000000000001499999999999999940000000000000001

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

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

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

转换为bytebyteValue()
转换为shortshortValue()
转换为intintValue()
转换为longlongValue()
转换为floatfloatValue()
转换为doubledoubleValue()

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

在这里插入图片描述

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

相关文章:

  • 改进YOLOv5系列:首发结合最新Extended efficient Layer Aggregation Networks结构,高效的聚合网络设计,提升性能
  • linux:vi和vim的使用
  • 老测试员偷偷告诉你:面试被问当前薪资?千万别瞎说大实话,答错可就亏大了
  • ComposeUI——下拉刷新+上拉加载(简单封装)
  • 【建议背诵】2022下半年软考「集成」100题(10)
  • LeetCode:寻找两个正序数组的中位数----多种解题方式
  • 超实用的JS常用算法详解(推荐)
  • 分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法
  • 金仓数据库KingbaseES物理备份恢复最佳实践(执行备份)
  • 【CSS】表格、定位_普通流定位与浮动定位、其他css常用属性_05
  • 没有学过C语言可以学Java吗?
  • 网络安全学习路线
  • 指针(四)- 函数指针和回调函数
  • 【职场必备知识】成都购房政策调研
  • 什么是xhr?XMLHttpRequest的基本使用及xhr Level2的新特性详解及案例
  • [数据结构]链表的实现在PHP中
  • HashMap ConcurrentHashMap
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java比较器对数组,集合排序
  • Java程序员幽默爆笑锦集
  • java中的hashCode
  • Python实现BT种子转化为磁力链接【实战】
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从伪并行的 Python 多线程说起
  • 多线程 start 和 run 方法到底有什么区别?
  • 服务器之间,相同帐号,实现免密钥登录
  • 记录:CentOS7.2配置LNMP环境记录
  • 京东美团研发面经
  • 聚类分析——Kmeans
  • 前端
  • 前端知识点整理(待续)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 阿里云ACE认证学习知识点梳理
  • 阿里云ACE认证之理解CDN技术
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (3) cmake编译多个cpp文件
  • (35)远程识别(又称无人机识别)(二)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (办公)springboot配置aop处理请求.
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)Sql Server 保留几位小数的两种做法
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 材料检测系统崩溃分析
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /var/lib/dpkg/lock 锁定问题
  • @ModelAttribute使用详解