Java實(shí)現(xiàn)十進(jìn)制與二進(jìn)制互轉(zhuǎn)的示例詳解
十進(jìn)制轉(zhuǎn)二進(jìn)制
正整數(shù)轉(zhuǎn)二進(jìn)制
除2取余,逆序排列,高位補(bǔ)零。
示例:
十進(jìn)制255 = 二進(jìn)制1111 1111
計(jì)算過(guò)程:
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)換成二進(jìn)制
乘2取整,順序排列。
十進(jìn)制0.625 = 二進(jìn)制0.101
計(jì)算過(guò)程:
0.625*2=1.25======取出整數(shù)部分1
0.25*2=0.5========取出整數(shù)部分0
0.5*2=1==========取出整數(shù)部分1
代碼實(shí)現(xiàn)
Java類(lèi)實(shí)現(xiàn):
System.out.println(new BigInteger("255", 10).toString(2));
自定義實(shí)現(xiàn):
public static void main(String[] args) {
System.out.print("輸入一個(gè)十進(jìn)制數(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);
}
二進(jìn)制轉(zhuǎn)十進(jìn)制
小數(shù)點(diǎn)前或者整數(shù)要從右到左用二進(jìn)制的每個(gè)數(shù)去乘以2的相應(yīng)次方并遞增,小數(shù)點(diǎn)后則是從左往右乘以二的相應(yīng)負(fù)次方并遞減。
示例:
二進(jìn)制數(shù)1101.01轉(zhuǎn)化成十進(jìn)制
計(jì)算過(guò)程:
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)
代碼實(shí)現(xiàn)
Java類(lèi)實(shí)現(xiàn):
Integer.parseInt("1111",2);
自定義實(shí)現(xiàn):
public static void main(String[] args) {
System.out.print("輸入一個(gè)二進(jìn)制數(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ù)可以直接通過(guò)CPU指令進(jìn)行計(jì)算,速度非??臁?/p>
如果我們使用的整數(shù)范圍超過(guò)了long型怎么辦?
這里就引入我們要了解的主角BigInteger。
java.math.BigInteger就是用來(lái)表示任意大小的整數(shù)。BigInteger內(nèi)部用一個(gè)int[]數(shù)組來(lái)模擬一個(gè)非常大的整數(shù):
運(yùn)用
如果不借助BigInteger類(lèi),當(dāng)你需要運(yùn)算9999999999999999的6次方,你敢想嗎?或者還又哪些辦法
BigInteger bi = new BigInteger("9999999999999999");
System.out.println(bi.pow(6));
結(jié)果:
999999999999999400000000000000149999999999999980000000000000001499999999999999940000000000000001
如果在瘋狂點(diǎn)?結(jié)果是多少?
BigInteger bi = new BigInteger("999999999999999999");
System.out.println(bi.pow(999999999));
BigInteger和Integer、Long一樣,也是不可變類(lèi),并且也繼承自Number類(lèi)。因?yàn)镹umber定義了轉(zhuǎn)換為基本類(lèi)型的幾個(gè)方法:
- 轉(zhuǎn)換為byte:byteValue()
- 轉(zhuǎn)換為short:shortValue()
- 轉(zhuǎn)換為int:intValue()
- 轉(zhuǎn)換為long:longValue()
- 轉(zhuǎn)換為float:floatValue()
- 轉(zhuǎn)換為double:doubleValue()
通過(guò)上述方法,可以把BigInteger轉(zhuǎn)換成基本類(lèi)型。如果BigInteger表示的范圍超過(guò)了基本類(lèi)型的范圍,轉(zhuǎn)換時(shí)將丟失高位信息,即結(jié)果不一定是準(zhǔn)確的。如果需要準(zhǔn)確地轉(zhuǎn)換成基本類(lèi)型,可以使用intValueExact()、longValueExact()等方法,在轉(zhuǎn)換時(shí)如果超出范圍,將直接拋出ArithmeticException異常。
到此這篇關(guān)于Java實(shí)現(xiàn)十進(jìn)制與二進(jìn)制互轉(zhuǎn)的示例詳解的文章就介紹到這了,更多相關(guān)Java十進(jìn)制二進(jìn)制互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程,通常Java中的AOP都是利用Spring框架中造好的輪子來(lái)開(kāi)發(fā),而本文則關(guān)注于Java本身AOP的設(shè)計(jì)模式實(shí)現(xiàn),需要的朋友可以參考下2016-04-04
java 實(shí)現(xiàn)雙向鏈表實(shí)例詳解
這篇文章主要介紹了java 實(shí)現(xiàn)雙向鏈表實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
spring boot 2整合swagger-ui過(guò)程解析
這篇文章主要介紹了spring boot 2整合swagger-ui過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
eclipse部署tomcat服務(wù)器無(wú)法啟動(dòng)問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了eclipse部署tomcat服務(wù)器無(wú)法啟動(dòng)問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Java并發(fā)編程之Executors類(lèi)詳解
今天給大家?guī)?lái)的是關(guān)于Java并發(fā)編程的相關(guān)知識(shí),文章圍繞著Java Executors類(lèi)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
SpringBoot接收參數(shù)所有方式總結(jié)
這篇文章主要介紹了SpringBoot接收參數(shù)所有方式總結(jié),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07
過(guò)濾器 和 攔截器的 6個(gè)區(qū)別(別再傻傻分不清了)
這篇文章主要介紹了過(guò)濾器 和 攔截器的 6個(gè)區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來(lái)學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11

