進制之間如何轉換

寫在前面:博主是一只經過實戰開發歷練後投身培訓事業的“小山豬”,暱稱取自動畫片《獅子王》中的“彭彭”,總是以樂觀、積極的心態對待周邊的事物。本人的技術路線從Java全棧工程師一路奔向大數據開發、數據挖掘領域,如今終有小成,願將昔日所獲與大家交流一二,希望對學習路上的你有所助益。同時,博主也想通過此次嘗試打造一個完善的技術圖書館,任何與文章技術點有關的異常、錯誤、注意事項均會在末尾列出,歡迎大家通過各種方式提供素材。

  • 對於文章中出現的任何錯誤請大家批評指出,一定及時修改。
  • 有任何想要討論和學習的問題可聯繫我:[email protected]
  • 發佈文章的風格因專欄而異,均自成體系,不足之處請大家指正。

進制之間如何轉換

文本關鍵字:二進制、十進制、進制轉換、八進制、十六進制

一、進制

大家最開始接觸的數字和計算方法都是基於十進制的,那麼進制的意思也就是一種計數方法。根據相應的進制規則進行進位,相同的一串數字在不同的進制下也會對應不同的大小,所以在程序中都會對數字的進制有明確的標識。

1. 十進制

十進制就是滿10進1,那麼每一位上的數字範圍也就只能是0~9,也是默認使用的進制。

2. 二進制

二進制就是滿2進1,那麼每一位上的數字範圍也就只能是0或1,Java中使用0b開頭。

3. 八進制

八進制就是滿8進1,那麼每一位上的數字範圍也就只能是0~7,Java中使用0開頭。

4. 十六進制

十六進制就是滿16進1,對於大於10的數字從字母A開始進行代表,即A代表10,B代表11,F代表15,那麼每一位上的數字範圍也就只能是0~F,Java中使用0x開頭。

二、十進制與二進制的轉換

在最開始接觸編程時總要學習一下和二進制的轉換,因爲這是計算機在工作時使用的進制,很多位運算的操作也是在二進制下進行的,所以我們必須要掌握與二進制相關的進制轉換。

1. 二進制轉換爲十進制

將一個其他進制數轉換爲十進制數的過程其實就是根據相應的進制來進行換算。在轉換之前我們先來看一下我們最熟悉不過的十進制,比如:1367。看到這個數字我們都會毫不猶豫的說出:一千三百六十七,這是我們習以爲常的事情,但是具體的過程是什麼呢?

  • 1367 = 7 × 1 + 6 × 10 + 3 × 100 + 1 × 1000
  • 1367 = 7 × 10^0 + 6 × 10^1 + 3 × 10^2 + 1 × 10^3

從上面的步驟可以看出,其實一個數字的解讀其實是從右向左進行的,只不過由於我們對於十進制太過了解所以忽略了這個步驟,那麼用這個數字感受一下:1237173927,我猜你一定是在從右往左,從個位開始數,到底是多少吧?
那麼其他進制的運算規則也是如此,現在我們就來讀幾個二進制數。

  • 101:1 × 2^0 + 0 × 2^1 + 1 × 2^2 = 5
  • 10010:0 × 2^0 + 1 × 2^1 + 0 × 2^2 + 0 × 2^3 + 1 × 2^4 = 18
  • 1010101:1 × 2^0 + 0 × 2^1 + 1 × 2^2 + 0 × 2^3 + 1 × 2^4 + 0 × 2^5 + 1 × 2^6 = 85

恭喜,我們的進制轉換已經完成了。方法就是從右至左,將乘得的結果進行相加。同時,我們注意到,只要末位是0,那麼這個數一定可以被2整除,其他進制也有這個規律(就像個位爲零的數一定可以被10整除)。

2. 十進制轉換爲二進制

  • 常規方法:

將一個十進制數轉換爲一個二進制數的過程其實就是一個不斷算除法和記錄餘數的過程,既然是轉換爲二進制,那麼我們的除數就是2,具體過程如下:
10進制數:37 -> 二進制結果:100101
在這裏插入圖片描述

  • 小數字快速轉換法:

對於不是很大的數字其實有一種比較快的轉換辦法,但是前提是我們要對2的次方的運算結果比較熟悉,基本上記憶到2的10次方爲1024就足夠用了。方法就是我們將一個十進制數直接拆解爲幾個2的n次方加和的形式,從最大的數開始。
比如對於37,最大的二進制數是32,接下來是4,然後是1,那麼等式就是:37 = 32 + 4 + 1。

  • 32是2的5次方
  • 4是2的平方
  • 1是2的零次方

所以對應的二進制數的第6個位置,第3個位置,第1個位置上的數字爲1(需要錯開一位),其他爲0。用這種方法也能夠快速的知道最高位爲1的位置,可以很流暢的按照從左至右的順序直接將二進制寫出來,但是對於大的數字就不太適用了。

發佈了31 篇原創文章 · 獲贊 197 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章