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.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异常。
到此这篇关于Java实现十进制与二进制互转的示例详解的文章就介绍到这了,更多相关Java十进制二进制互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
迅速学会@ConfigurationProperties的使用操作
这篇文章主要介绍了迅速学会@ConfigurationProperties的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10Spring动态监听Nacos配置中心key值变更的实现方法
Nacos本身提供支持监听配置变更的操作,但在使用起来,个人感觉不是很友好,无法精确到某个key的变更监听,所以本文小编给大家介绍了Spring动态监听Nacos配置中心key值变更的实现方法,需要的朋友可以参考下2024-08-08Springboot3整合Mybatis-plus3.5.3报错问题解决
在日常学习springboot3相关的代码时,在使用 SpringBoot3 整合 MyBatisplus 时出现了一些问题,花了不少时间处理,这篇文章主要介绍了Springboot3整合Mybatis-plus3.5.3报错问题解决,需要的朋友可以参考下2023-11-11
最新评论