JAVA中的進制轉換

對于進制,我們程序員都不陌生。我們常用的進制有2進制、8進制、10進制、16進制。它們之間的區別在于數運算時進位不同。2進制是逢2進1、8進制是逢8進1、10進制是逢10進1、16進制是逢16進1。2進制的存在是因為計算機只能識別0和1故有了2進制。10進制是因為我們常用的數字表示法是10進制。那么8進制和16進制為什么存在呢。為了減少書寫的復雜性和讀起來也更直觀引入了8進制和16進制。下面我們就看下這些進制之間是如何轉換的。

十進制轉二進制:

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

二進制轉十進制:

方法:把二進制數每位按權展開(按權展開:進制數乘以對應的權數次方,如二進制數1100100左邊第一位按權展開為 0 * 2 ^ 0 = 0 )、相加即得十進制數。其中權就是從右往左數第幾位數
如1100100從右往左每位數的權依次為:0、1、2、3、4、5、6
那么把2進制1100100轉換為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對應的10進制數為100

二進制轉八進制

方法:從右往左每3位二進制數按權展開(注意三位的權分別為0、1、2)相加得到1位八進制數。不足3位左邊補0.
如1100100 轉換為8進制就是
右邊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轉換為8進制為 144

八進制轉二進制

方法:八進制數每位數通過除2取余法,得到二進制數,對每個八進制為3個二進制位,不足時在最左邊補零。
如8進制144轉換為2進制
第一個8進制位:4 按十進制轉二進制計算得 100
第二個8進制位:4 按十進制轉二進制計算得 100
第三個8進制位:1 按十進制轉二進制計算得 1 不足3位左邊補0,即001
故八進制144轉換為2進制為 001100100習慣上去掉左邊的0即為1100100

二進制轉十六進制

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

十六進制轉二進制

方法:十六進制數每位數通過除2取余法,得到二進制數,對每個十六進制為4個二進制位,不足時在最左邊補零。
如16進制64轉換為2進制
第一個16進制位: 4 按十進制轉二進制計算得 100,不足4位左邊補0,即0100
第二個16進制位: 6按十進制轉二進制計算得 110,不足4位左邊補0,即0110
故16進制64轉換為2進制為 01100100習慣上去掉左邊的0即為1100100

十進制轉八進制

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

十進制轉十六進制

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

八進制轉十進制

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

十六進制轉10進制

方法:把十六進制數每位按權展開(按權展開:進制數乘以對應的權數次方,如十六進制數64左邊第一位按權展開為 4 * 16 ^ 0 = 4 )、相加即得十進制數。
如:十六進制數64轉換為10進制, 4 * 16 ^0 + 6 * 16 ^ 1 = 4 + 96 = 100

八進制與十六進制互轉

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

十進制轉換為其它進制

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

其它進制轉換為10進制

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

至此各進制之間的轉換就到此結束了,下面我們看下java中是如何進行這些進制轉換。

十進制轉其它進制

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

其它進制轉換為十進制

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

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容