Java实现十进制与二进制互转的示例详解

作者:三省同学 时间:2022-04-02 07:40:56 

十进制转二进制

正整数转二进制

除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.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25(10)

代码实现

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定义了转换为基本类型的几个方法:

  • 转换为byte:byteValue()

  • 转换为short:shortValue()

  • 转换为int:intValue()

  • 转换为long:longValue()

  • 转换为float:floatValue()

  • 转换为double:doubleValue()

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

来源:https://ssxtx.blog.csdn.net/article/details/127429984

标签:Java,二进制,十进制
0
投稿

猜你喜欢

  • java生成图片验证码实例代码

    2022-01-06 04:01:37
  • MyBatis中的properties配置(推荐)

    2023-06-04 20:47:58
  • idea启动springmvc项目时报找不到类的解决方法

    2023-11-09 16:51:04
  • Java实现简单登陆界面

    2022-11-25 05:47:47
  • Java排序算法总结之希尔排序

    2022-07-16 13:19:11
  • Java Spring开发环境搭建及简单入门示例教程

    2021-08-17 07:36:28
  • Java中 ? extends T 和 ? super T的理解

    2022-06-26 19:50:23
  • Java 根据网址查询DNS/IP地址的方法

    2023-06-21 15:31:54
  • Idea配置Maven阿里云镜像加速的实现

    2021-10-24 11:30:32
  • Springboot @Validated和@Valid的区别及使用详解

    2023-05-30 18:40:25
  • iOS WebView中使用webp格式图片的方法

    2023-06-17 22:06:03
  • Java调用第三方http接口的常用方式总结

    2023-11-06 22:47:24
  • Hadoop的安装与环境搭建教程图解

    2022-06-28 16:19:47
  • java中使用数组进行模拟加密的方法

    2023-11-18 15:37:39
  • Java环境配置图文教程(推荐)

    2023-09-17 11:27:42
  • 浅谈Java变量的初始化顺序详解

    2023-07-26 03:23:17
  • springboot+springsecurity如何实现动态url细粒度权限认证

    2023-10-01 04:06:39
  • Java本地缓存工具之LoadingCache的使用详解

    2023-06-24 11:28:11
  • Spring Security入门demo案例

    2023-07-01 18:57:30
  • 快速学习六大排序算法

    2023-11-02 22:36:19
  • asp之家 软件编程 m.aspxhome.com