您现在的位置是:首页 > 编程语言学习 > 其他编程语言 > 文章正文 其他编程语言

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

2022-11-23 09:47:03 其他编程语言

简介这篇文章主要为大家详细介绍了Java如何实现十进制与二进制的互转,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下...

这篇文章主要为大家详细介绍了Java如何实现十进制与二进制的互转,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下!

十进制转二进制

正整数转二进制

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

示例:

十进制255 = 二进制1111 1111

计算过程:

255/2=127=====余1127/2=63======余163/2=31=======余131/2=15=======余115/2=7========余17/2=3=========余13/2=1=========余11/2=0=========余1

小数转换成二进制

乘2取整,顺序排列。

十进制0.625 = 二进制0.101

计算过程:

0.625*2=1.25======取出整数部分10.25*2=0.5========取出整数部分00.5*2=1==========取出整数部分1

代码实现

Java类实现:


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

自定义实现:

  1. public static void main(String[] args) { 
  2. System.out.print("输入一个十进制数:"); 
  3. Scanner s = new Scanner(System.in); 
  4. int num = s.nextInt(); 
  5. String result = ""
  6. for (int i = num; i > 0; i /= 2) { 
  7. result = i % 2 + result; 
  8. 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类实现:

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

自定义实现:

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

BigInteger

概念

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

如果我们使用的整数范围超过了long型怎么办?

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

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

运用

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

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

结果:

999999999999999400000000000000149999999999999980000000000000001499999999999999940000000000000001

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

  1. BigInteger bi = new BigInteger("999999999999999999"); 
  2. 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异常。

站点信息