進位之間如何轉換
- 2020 年 4 月 10 日
- 筆記
寫在前面:部落客是一隻經過實戰開發歷練後投身培訓事業的「小山豬」,昵稱取自動畫片《獅子王》中的「彭彭」,總是以樂觀、積極的心態對待周邊的事物。本人的技術路線從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的位置,可以很流暢的按照從左至右的順序直接將二進位寫出來,但是對於大的數字就不太適用了。