對于進制,我們程序員都不陌生鞭光。我們常用的進制有2進制吏廉、8進制、10進制惰许、16進制席覆。它們之間的區(qū)別在于數(shù)運算時進位不同。2進制是逢2進1啡省、8進制是逢8進1娜睛、10進制是逢10進1、16進制是逢16進1卦睹。2進制的存在是因為計算機只能識別0和1故有了2進制。10進制是因為我們常用的數(shù)字表示法是10進制方库。那么8進制和16進制為什么存在呢结序。為了減少書寫的復(fù)雜性和讀起來也更直觀引入了8進制和16進制。下面我們就看下這些進制之間是如何轉(zhuǎn)換的纵潦。
十進制轉(zhuǎn)二進制:
方法:十進制數(shù)除2取余法徐鹤,即十進制數(shù)除2,余數(shù)從右到左放邀层,得到的商值繼續(xù)除2返敬,依此步驟繼續(xù)向下運算直到商為0為止。
如:100 轉(zhuǎn)換為2進制步驟如下:
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的二進制表示為 1100100
二進制轉(zhuǎn)十進制:
方法:把二進制數(shù)每位按權(quán)展開(按權(quán)展開:進制數(shù)乘以對應(yīng)的權(quán)數(shù)次方劲赠,如二進制數(shù)1100100左邊第一位按權(quán)展開為 0 * 2 ^ 0 = 0 )、相加即得十進制數(shù)秸谢。其中權(quán)就是從右往左數(shù)第幾位數(shù)
如1100100從右往左每位數(shù)的權(quán)依次為:0凛澎、1、2估蹄、3塑煎、4、5臭蚁、6
那么把2進制1100100轉(zhuǎn)換為10進制就是 02^0 + 02^1 + 12^2 + 02^3 + 02^4 +12^5 + 1*2^6 = 0+0+4+0+0+32+64 = 100 ,即2進制1100100對應(yīng)的10進制數(shù)為100
二進制轉(zhuǎn)八進制
方法:從右往左每3位二進制數(shù)按權(quán)展開(注意三位的權(quán)分別為0最铁、1讯赏、2)相加得到1位八進制數(shù)。不足3位左邊補0.
如1100100 轉(zhuǎn)換為8進制就是
右邊3位 100 -> 02^0 + 02^1 + 12^2 = 4
中間3位 100 -> 02^0 + 02^1 + 12^2 = 4
左邊3位 001 -> 12^0 + 02^1 + 0*2^2 = 1
所以1100100轉(zhuǎn)換為8進制為 144
八進制轉(zhuǎn)二進制
方法:八進制數(shù)每位數(shù)通過除2取余法冷尉,得到二進制數(shù)待逞,對每個八進制為3個二進制位,不足時在最左邊補零网严。
如8進制144轉(zhuǎn)換為2進制
第一個8進制位:4 按十進制轉(zhuǎn)二進制計算得 100
第二個8進制位:4 按十進制轉(zhuǎn)二進制計算得 100
第三個8進制位:1 按十進制轉(zhuǎn)二進制計算得 1 不足3位左邊補0识樱,即001
故八進制144轉(zhuǎn)換為2進制為 001100100習(xí)慣上去掉左邊的0即為1100100
二進制轉(zhuǎn)十六進制
方法:與二進制轉(zhuǎn)八進制方法近似,八進制是取三合一震束,十六進制是取四合一怜庸。4位二進制轉(zhuǎn)成十六進制是從右到左開始轉(zhuǎn)換,不足時補0
如:1100100轉(zhuǎn)換為16進制
右邊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進制為 64
十六進制轉(zhuǎn)二進制
方法:十六進制數(shù)每位數(shù)通過除2取余法垢村,得到二進制數(shù)割疾,對每個十六進制為4個二進制位,不足時在最左邊補零嘉栓。
如16進制64轉(zhuǎn)換為2進制
第一個16進制位: 4 按十進制轉(zhuǎn)二進制計算得 100宏榕,不足4位左邊補0,即0100
第二個16進制位: 6按十進制轉(zhuǎn)二進制計算得 110侵佃,不足4位左邊補0麻昼,即0110
故16進制64轉(zhuǎn)換為2進制為 01100100習(xí)慣上去掉左邊的0即為1100100
十進制轉(zhuǎn)八進制
方法1:十進制轉(zhuǎn)換為二進制,然后二進制換為8進制
方法2:把十進制轉(zhuǎn)八進制按照除8取余馋辈,余數(shù)從右至左放抚芦,直到商為0為止。
如:10進制100轉(zhuǎn)換為8進制
100 / 8 商為12 余數(shù)為 4 -> 4
12 / 8 商為1 余數(shù)為 4 -> 44
1 / 8 商為0 余數(shù)為 1 -> 144
到商為0為止迈螟,即100的8進制表示為 144
十進制轉(zhuǎn)十六進制
方法1:十進制轉(zhuǎn)換為二進制叉抡,然后二進制換為十六進制
方法2:把十進制轉(zhuǎn)十六進制按照除16取余,余數(shù)從右至左放答毫,直到商為0為止褥民。
如:10進制100轉(zhuǎn)換為16進制
100 / 16 商為6 余數(shù)為 4 -> 4
6 / 16 商為0 余數(shù)為 6 -> 64
到商為0為止,即100的16進制表示為 64
八進制轉(zhuǎn)十進制
方法:把八進制數(shù)每位按權(quán)展開(按權(quán)展開:進制數(shù)乘以對應(yīng)的權(quán)數(shù)次方洗搂,如八進制數(shù)144左邊第一位按權(quán)展開為 4 * 8 ^ 0 = 4 )消返、相加即得十進制數(shù)。
如:八進制 144轉(zhuǎn)換為10進制蚕脏, 4* 8 ^ 0 + 4 * 8 ^ 1 +1 * 8 ^ 2 = 4 + 32 + 64 = 100
十六進制轉(zhuǎn)10進制
方法:把十六進制數(shù)每位按權(quán)展開(按權(quán)展開:進制數(shù)乘以對應(yīng)的權(quán)數(shù)次方侦副,如十六進制數(shù)64左邊第一位按權(quán)展開為 4 * 16 ^ 0 = 4 )、相加即得十進制數(shù)驼鞭。
如:十六進制數(shù)64轉(zhuǎn)換為10進制秦驯, 4 * 16 ^0 + 6 * 16 ^ 1 = 4 + 96 = 100
八進制與十六進制互轉(zhuǎn)
方法一:八進制(十六進制)先轉(zhuǎn)換為二進制,然后二進制再轉(zhuǎn)換為十六進制(八進制)
方法二:八進制(十六進制)先轉(zhuǎn)換為十進制挣棕,然后十進制再轉(zhuǎn)換為十六進制(八進制)
十進制轉(zhuǎn)換為其它進制
方法:把十進制轉(zhuǎn)其它進制按照除進制數(shù)取余译隘,余數(shù)從右至左放亲桥,直到商為0為止。
如:10進制100轉(zhuǎn)換為7進制(其它進制類似)
100 / 7 商為14 余數(shù)為 2 -> 2
14 / 7 商為2 余數(shù)為0 -> 02
2 / 7 商為0 余數(shù)為 2 -> 202
到商為0為止固耘,即100的7進制表示為 202
其它進制轉(zhuǎn)換為10進制
方法:把其它進制數(shù)每位按權(quán)展開(按權(quán)展開:進制數(shù)乘以對應(yīng)的權(quán)數(shù)次方题篷,如七進制數(shù)202左邊第一位按權(quán)展開為 2 * 7 ^ 0 = 2 )、相加即得十進制數(shù)厅目。
如:7進制202轉(zhuǎn)換為10進制番枚,2 * 7 ^ 0 + 0 * 7 ^ 1 + 2 * 7 ^ 2 = 2 + 0 + 98 = 100
至此各進制之間的轉(zhuǎn)換就到此結(jié)束了,下面我們看下java中是如何進行這些進制轉(zhuǎn)換损敷。
十進制轉(zhuǎn)其它進制
Integer.toHexString(10); 將10進制100轉(zhuǎn)換為十六進制葫笼,返回字符串類型
Integer.toOctalString(10); 將10進制100轉(zhuǎn)為八進制,返回字符串類型
Integer.toBinaryString(10); 將10進制100轉(zhuǎn)為二進制拗馒,返回字符串類型
Integer.toString(100, 7); 將10進制100轉(zhuǎn)換為7進制路星,返回字符串類型,其它第一個參數(shù)為待轉(zhuǎn)換的10進制數(shù)诱桂,第二個參數(shù)是需要轉(zhuǎn)換的進制洋丐。
其它進制轉(zhuǎn)換為十進制
方法一:Integer.valueOf("FFFF",16).toString(); 例為16進制轉(zhuǎn)換為10進制,如果是其它進制第二個參數(shù)傳進制數(shù)挥等,第一個參數(shù)傳對應(yīng)的進制表示法
方法二:Integer.parseInt("FFFF",16); 例為16進制轉(zhuǎn)換為10進制友绝,如果是其它進制第二個參數(shù)傳進制數(shù),第一個參數(shù)傳對應(yīng)的進制表示法
方法三:Integer.toString(0xFFFF); //該方法可直接傳入表示十六進制數(shù)字的基本數(shù)據(jù)類型触菜,傳入指定的進制表示法的數(shù)字即可九榔,16進制表示法:數(shù)前面加 0x如0xff,8進制表示法數(shù)前面加0如014涡相,注意該方法無法轉(zhuǎn)換為2進制數(shù),程序無法識別2進制剩蟀,比如你傳100,程序是當(dāng)10進制100處理還是當(dāng)2進制4處理催蝗,有歧義,故無法識別育特,程序默認是按10進制數(shù)處理的
有了十進制和其它進制之間的轉(zhuǎn)換丙号,那么兩個其它進制之間的轉(zhuǎn)換只需要以10進制為中介就可以了,如八進制轉(zhuǎn)換為十六進制缰冤,先將八進制轉(zhuǎn)換為十進制犬缨,然后再將十進制轉(zhuǎn)換為十六進制。其它類似棉浸。