Java實現(xiàn)十進制與二進制互轉(zhuǎn)的示例詳解
十進制轉(zhuǎn)二進制
正整數(shù)轉(zhuǎn)二進制
除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
小數(shù)轉(zhuǎn)換成二進制
乘2取整,順序排列。
十進制0.625 = 二進制0.101
計算過程:
0.625*2=1.25======取出整數(shù)部分1
0.25*2=0.5========取出整數(shù)部分0
0.5*2=1==========取出整數(shù)部分1
代碼實現(xiàn)
Java類實現(xiàn):
System.out.println(new BigInteger("255", 10).toString(2));
自定義實現(xiàn):
public static void main(String[] args) { System.out.print("輸入一個十進制數(shù):"); 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); }
二進制轉(zhuǎn)十進制
小數(shù)點前或者整數(shù)要從右到左用二進制的每個數(shù)去乘以2的相應次方并遞增,小數(shù)點后則是從左往右乘以二的相應負次方并遞減。
示例:
二進制數(shù)1101.01轉(zhuǎn)化成十進制
計算過程:
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)
代碼實現(xiàn)
Java類實現(xiàn):
Integer.parseInt("1111",2);
自定義實現(xiàn):
public static void main(String[] args) { System.out.print("輸入一個二進制數(shù):"); 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型整數(shù)。使用long型整數(shù)可以直接通過CPU指令進行計算,速度非??臁?/p>
如果我們使用的整數(shù)范圍超過了long型怎么辦?
這里就引入我們要了解的主角BigInteger。
java.math.BigInteger就是用來表示任意大小的整數(shù)。BigInteger內(nèi)部用一個int[]數(shù)組來模擬一個非常大的整數(shù):
運用
如果不借助BigInteger類,當你需要運算9999999999999999的6次方,你敢想嗎?或者還又哪些辦法
BigInteger bi = new BigInteger("9999999999999999"); System.out.println(bi.pow(6));
結(jié)果:
999999999999999400000000000000149999999999999980000000000000001499999999999999940000000000000001
如果在瘋狂點?結(jié)果是多少?
BigInteger bi = new BigInteger("999999999999999999"); System.out.println(bi.pow(999999999));
BigInteger和Integer、Long一樣,也是不可變類,并且也繼承自Number類。因為Number定義了轉(zhuǎn)換為基本類型的幾個方法:
- 轉(zhuǎn)換為byte:byteValue()
- 轉(zhuǎn)換為short:shortValue()
- 轉(zhuǎn)換為int:intValue()
- 轉(zhuǎn)換為long:longValue()
- 轉(zhuǎn)換為float:floatValue()
- 轉(zhuǎn)換為double:doubleValue()
通過上述方法,可以把BigInteger轉(zhuǎn)換成基本類型。如果BigInteger表示的范圍超過了基本類型的范圍,轉(zhuǎn)換時將丟失高位信息,即結(jié)果不一定是準確的。如果需要準確地轉(zhuǎn)換成基本類型,可以使用intValueExact()、longValueExact()等方法,在轉(zhuǎn)換時如果超出范圍,將直接拋出ArithmeticException異常。
到此這篇關(guān)于Java實現(xiàn)十進制與二進制互轉(zhuǎn)的示例詳解的文章就介紹到這了,更多相關(guān)Java十進制二進制互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
迅速學會@ConfigurationProperties的使用操作
這篇文章主要介紹了迅速學會@ConfigurationProperties的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實現(xiàn)方法
Nacos本身提供支持監(jiān)聽配置變更的操作,但在使用起來,個人感覺不是很友好,無法精確到某個key的變更監(jiān)聽,所以本文小編給大家介紹了Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實現(xiàn)方法,需要的朋友可以參考下2024-08-08Springboot3整合Mybatis-plus3.5.3報錯問題解決
在日常學習springboot3相關(guān)的代碼時,在使用 SpringBoot3 整合 MyBatisplus 時出現(xiàn)了一些問題,花了不少時間處理,這篇文章主要介紹了Springboot3整合Mybatis-plus3.5.3報錯問題解決,需要的朋友可以參考下2023-11-11