JAVA中的進(jìn)制轉(zhuǎn)換

對(duì)于進(jìn)制,我們程序員都不陌生。我們常用的進(jìn)制有2進(jìn)制、8進(jìn)制、10進(jìn)制、16進(jìn)制。它們之間的區(qū)別在于數(shù)運(yùn)算時(shí)進(jìn)位不同。2進(jìn)制是逢2進(jìn)1、8進(jìn)制是逢8進(jìn)1、10進(jìn)制是逢10進(jìn)1、16進(jìn)制是逢16進(jìn)1。2進(jìn)制的存在是因?yàn)橛?jì)算機(jī)只能識(shí)別0和1故有了2進(jìn)制。10進(jìn)制是因?yàn)槲覀兂S玫臄?shù)字表示法是10進(jìn)制。那么8進(jìn)制和16進(jìn)制為什么存在呢。為了減少書寫的復(fù)雜性和讀起來也更直觀引入了8進(jìn)制和16進(jìn)制。下面我們就看下這些進(jìn)制之間是如何轉(zhuǎn)換的。

十進(jìn)制轉(zhuǎn)二進(jìn)制:

方法:十進(jìn)制數(shù)除2取余法,即十進(jìn)制數(shù)除2,余數(shù)從右到左放,得到的商值繼續(xù)除2,依此步驟繼續(xù)向下運(yùn)算直到商為0為止。
如:100 轉(zhuǎn)換為2進(jìn)制步驟如下:
100 / 2 商為50 余數(shù)為0 -> 0
50 /2 商為25余數(shù)為0 -> 00
25 /2 商為12余數(shù)為1 -> 100
12 / 2 商為6 余數(shù)為0 -> 0100
6 /2 商為3余數(shù)為 0 -> 00100
3 /2 商為1 余數(shù)為 1 -> 100100
1 /2 商為0 余數(shù)為1 -> 1100100
到商為0為止,即100的二進(jìn)制表示為 1100100

二進(jìn)制轉(zhuǎn)十進(jìn)制:

方法:把二進(jìn)制數(shù)每位按權(quán)展開(按權(quán)展開:進(jìn)制數(shù)乘以對(duì)應(yīng)的權(quán)數(shù)次方,如二進(jìn)制數(shù)1100100左邊第一位按權(quán)展開為 0 * 2 ^ 0 = 0 )、相加即得十進(jìn)制數(shù)。其中權(quán)就是從右往左數(shù)第幾位數(shù)
如1100100從右往左每位數(shù)的權(quán)依次為:0、1、2、3、4、5、6
那么把2進(jìn)制1100100轉(zhuǎn)換為10進(jìn)制就是 02^0 + 02^1 + 12^2 + 02^3 + 02^4 +12^5 + 1*2^6 = 0+0+4+0+0+32+64 = 100 ,即2進(jìn)制1100100對(duì)應(yīng)的10進(jìn)制數(shù)為100

二進(jìn)制轉(zhuǎn)八進(jìn)制

方法:從右往左每3位二進(jìn)制數(shù)按權(quán)展開(注意三位的權(quán)分別為0、1、2)相加得到1位八進(jìn)制數(shù)。不足3位左邊補(bǔ)0.
如1100100 轉(zhuǎn)換為8進(jìn)制就是
右邊3位 100 -> 02^0 + 02^1 + 12^2 = 4
中間3位 100 -> 0
2^0 + 02^1 + 12^2 = 4
左邊3位 001 -> 12^0 + 02^1 + 0*2^2 = 1
所以1100100轉(zhuǎn)換為8進(jìn)制為 144

八進(jìn)制轉(zhuǎn)二進(jìn)制

方法:八進(jìn)制數(shù)每位數(shù)通過除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)八進(jìn)制為3個(gè)二進(jìn)制位,不足時(shí)在最左邊補(bǔ)零。
如8進(jìn)制144轉(zhuǎn)換為2進(jìn)制
第一個(gè)8進(jìn)制位:4 按十進(jìn)制轉(zhuǎn)二進(jìn)制計(jì)算得 100
第二個(gè)8進(jìn)制位:4 按十進(jìn)制轉(zhuǎn)二進(jìn)制計(jì)算得 100
第三個(gè)8進(jìn)制位:1 按十進(jìn)制轉(zhuǎn)二進(jìn)制計(jì)算得 1 不足3位左邊補(bǔ)0,即001
故八進(jìn)制144轉(zhuǎn)換為2進(jìn)制為 001100100習(xí)慣上去掉左邊的0即為1100100

二進(jìn)制轉(zhuǎn)十六進(jìn)制

方法:與二進(jìn)制轉(zhuǎn)八進(jìn)制方法近似,八進(jìn)制是取三合一,十六進(jìn)制是取四合一。4位二進(jìn)制轉(zhuǎn)成十六進(jìn)制是從右到左開始轉(zhuǎn)換,不足時(shí)補(bǔ)0
如:1100100轉(zhuǎn)換為16進(jìn)制
右邊4位 0100 -> 02^0 + 02^1 + 12^2 +02^3 = 4
左邊4位0110 -> 02^0 + 12^1 +12^2 +02^3 = 6
1100100轉(zhuǎn)換為16進(jìn)制為 64

十六進(jìn)制轉(zhuǎn)二進(jìn)制

方法:十六進(jìn)制數(shù)每位數(shù)通過除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)十六進(jìn)制為4個(gè)二進(jìn)制位,不足時(shí)在最左邊補(bǔ)零。
如16進(jìn)制64轉(zhuǎn)換為2進(jìn)制
第一個(gè)16進(jìn)制位: 4 按十進(jìn)制轉(zhuǎn)二進(jìn)制計(jì)算得 100,不足4位左邊補(bǔ)0,即0100
第二個(gè)16進(jìn)制位: 6按十進(jìn)制轉(zhuǎn)二進(jìn)制計(jì)算得 110,不足4位左邊補(bǔ)0,即0110
故16進(jìn)制64轉(zhuǎn)換為2進(jìn)制為 01100100習(xí)慣上去掉左邊的0即為1100100

十進(jìn)制轉(zhuǎn)八進(jìn)制

方法1:十進(jìn)制轉(zhuǎn)換為二進(jìn)制,然后二進(jìn)制換為8進(jìn)制
方法2:把十進(jìn)制轉(zhuǎn)八進(jìn)制按照除8取余,余數(shù)從右至左放,直到商為0為止。
如:10進(jìn)制100轉(zhuǎn)換為8進(jìn)制
100 / 8 商為12 余數(shù)為 4 -> 4
12 / 8 商為1 余數(shù)為 4 -> 44
1 / 8 商為0 余數(shù)為 1 -> 144
到商為0為止,即100的8進(jìn)制表示為 144

十進(jìn)制轉(zhuǎn)十六進(jìn)制

方法1:十進(jìn)制轉(zhuǎn)換為二進(jìn)制,然后二進(jìn)制換為十六進(jìn)制
方法2:把十進(jìn)制轉(zhuǎn)十六進(jìn)制按照除16取余,余數(shù)從右至左放,直到商為0為止。
如:10進(jìn)制100轉(zhuǎn)換為16進(jìn)制
100 / 16 商為6 余數(shù)為 4 -> 4
6 / 16 商為0 余數(shù)為 6 -> 64
到商為0為止,即100的16進(jìn)制表示為 64

八進(jìn)制轉(zhuǎn)十進(jìn)制

方法:把八進(jìn)制數(shù)每位按權(quán)展開(按權(quán)展開:進(jìn)制數(shù)乘以對(duì)應(yīng)的權(quán)數(shù)次方,如八進(jìn)制數(shù)144左邊第一位按權(quán)展開為 4 * 8 ^ 0 = 4 )、相加即得十進(jìn)制數(shù)。
如:八進(jìn)制 144轉(zhuǎn)換為10進(jìn)制, 4* 8 ^ 0 + 4 * 8 ^ 1 +1 * 8 ^ 2 = 4 + 32 + 64 = 100

十六進(jìn)制轉(zhuǎn)10進(jìn)制

方法:把十六進(jìn)制數(shù)每位按權(quán)展開(按權(quán)展開:進(jìn)制數(shù)乘以對(duì)應(yīng)的權(quán)數(shù)次方,如十六進(jìn)制數(shù)64左邊第一位按權(quán)展開為 4 * 16 ^ 0 = 4 )、相加即得十進(jìn)制數(shù)。
如:十六進(jìn)制數(shù)64轉(zhuǎn)換為10進(jìn)制, 4 * 16 ^0 + 6 * 16 ^ 1 = 4 + 96 = 100

八進(jìn)制與十六進(jìn)制互轉(zhuǎn)

方法一:八進(jìn)制(十六進(jìn)制)先轉(zhuǎn)換為二進(jìn)制,然后二進(jìn)制再轉(zhuǎn)換為十六進(jìn)制(八進(jìn)制)
方法二:八進(jìn)制(十六進(jìn)制)先轉(zhuǎn)換為十進(jìn)制,然后十進(jìn)制再轉(zhuǎn)換為十六進(jìn)制(八進(jìn)制)

十進(jìn)制轉(zhuǎn)換為其它進(jìn)制

方法:把十進(jìn)制轉(zhuǎn)其它進(jìn)制按照除進(jìn)制數(shù)取余,余數(shù)從右至左放,直到商為0為止。
如:10進(jìn)制100轉(zhuǎn)換為7進(jìn)制(其它進(jìn)制類似)
100 / 7 商為14 余數(shù)為 2 -> 2
14 / 7 商為2 余數(shù)為0 -> 02
2 / 7 商為0 余數(shù)為 2 -> 202
到商為0為止,即100的7進(jìn)制表示為 202

其它進(jìn)制轉(zhuǎn)換為10進(jìn)制

方法:把其它進(jìn)制數(shù)每位按權(quán)展開(按權(quán)展開:進(jìn)制數(shù)乘以對(duì)應(yīng)的權(quán)數(shù)次方,如七進(jìn)制數(shù)202左邊第一位按權(quán)展開為 2 * 7 ^ 0 = 2 )、相加即得十進(jìn)制數(shù)。
如:7進(jìn)制202轉(zhuǎn)換為10進(jìn)制,2 * 7 ^ 0 + 0 * 7 ^ 1 + 2 * 7 ^ 2 = 2 + 0 + 98 = 100

至此各進(jìn)制之間的轉(zhuǎn)換就到此結(jié)束了,下面我們看下java中是如何進(jìn)行這些進(jìn)制轉(zhuǎn)換。

十進(jìn)制轉(zhuǎn)其它進(jìn)制

Integer.toHexString(10);  將10進(jìn)制100轉(zhuǎn)換為十六進(jìn)制,返回字符串類型
Integer.toOctalString(10);  將10進(jìn)制100轉(zhuǎn)為八進(jìn)制,返回字符串類型
Integer.toBinaryString(10); 將10進(jìn)制100轉(zhuǎn)為二進(jìn)制,返回字符串類型
Integer.toString(100, 7); 將10進(jìn)制100轉(zhuǎn)換為7進(jìn)制,返回字符串類型,其它第一個(gè)參數(shù)為待轉(zhuǎn)換的10進(jìn)制數(shù),第二個(gè)參數(shù)是需要轉(zhuǎn)換的進(jìn)制。

其它進(jìn)制轉(zhuǎn)換為十進(jìn)制

方法一:Integer.valueOf("FFFF",16).toString(); 例為16進(jìn)制轉(zhuǎn)換為10進(jìn)制,如果是其它進(jìn)制第二個(gè)參數(shù)傳進(jìn)制數(shù),第一個(gè)參數(shù)傳對(duì)應(yīng)的進(jìn)制表示法
方法二:Integer.parseInt("FFFF",16);  例為16進(jìn)制轉(zhuǎn)換為10進(jìn)制,如果是其它進(jìn)制第二個(gè)參數(shù)傳進(jìn)制數(shù),第一個(gè)參數(shù)傳對(duì)應(yīng)的進(jìn)制表示法
方法三:Integer.toString(0xFFFF);  //該方法可直接傳入表示十六進(jìn)制數(shù)字的基本數(shù)據(jù)類型,傳入指定的進(jìn)制表示法的數(shù)字即可,16進(jìn)制表示法:數(shù)前面加 0x如0xff,8進(jìn)制表示法數(shù)前面加0如014,注意該方法無法轉(zhuǎn)換為2進(jìn)制數(shù),程序無法識(shí)別2進(jìn)制,比如你傳100,程序是當(dāng)10進(jìn)制100處理還是當(dāng)2進(jìn)制4處理,有歧義,故無法識(shí)別,程序默認(rèn)是按10進(jìn)制數(shù)處理的

有了十進(jìn)制和其它進(jìn)制之間的轉(zhuǎn)換,那么兩個(gè)其它進(jìn)制之間的轉(zhuǎn)換只需要以10進(jìn)制為中介就可以了,如八進(jìn)制轉(zhuǎn)換為十六進(jìn)制,先將八進(jìn)制轉(zhuǎn)換為十進(jìn)制,然后再將十進(jìn)制轉(zhuǎn)換為十六進(jìn)制。其它類似。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容