大話二進位制,八進位制,十進位制,十六進位制之間的轉換

楓伶憶發表於2015-09-05

1.前言

每次放假最無聊的事情,就是不想起床,不想吃飯,方正就是不想動,躺在床上,看著手機,無聊的刷著QQ空間,雖然現在已經很少人玩QQ空間,可是這種習慣一直保持到現在,都沒有改變過,電腦上的QQ突然閃動著,我知道是丁大叔發來的QQ訊息,叫我一起去吃重慶老麻抄手,丁大叔之所以叫大叔,是因為一起上學的時候,被我們班上的女生調戲了一下,所以我時常拿這個調侃他,不過他也從來都不在乎。

我是湖北人,丁大叔是四川人,我倆的口味都一樣,吃東西都要多少帶點辣的,在這個變態的廣州,他們都不吃辣椒的,要麼就是超級辣的那種,真叫人受不了。

在我心裡我一直很佩服丁大叔的,他湖南大學的高材生,日語專業,日語一級,英語六級,更讓我佩服的是他大學的時候,他們班上就3個男生,其他都是女孩子,他萬花叢中過片葉不沾身,硬著沒找個女朋友,我佩服的全身著地,他最大的志向就是去島國,畢竟人家日語一級嘛,要是不去心裡上也過不去。

還是和往常一樣,吃著抄手,討論著我們最近都在公司做什麼專案,一次無意的談話,他問我知道什麼是二進位制麼,我說知道,他接著問,你知道怎麼用嗎,我說不知道,難道不會用二進位制,還不能寫程式碼了麼?說了這麼多畢竟丁大叔,還是那麼牛逼,只怪自己學而不精嘛,於是有了這篇文章。

二進位制一個熟悉又很陌生的東西,貌似現在的應用程式設計師用的真的很少,現在都用高階語言來開發程式,誰還用到二進位制,八進位制,十六進位制,給我的感覺那就是這些都是那些c,c++寫一些底層互動的程式設計師乾的事,向c,c++大神致敬,今天班門弄斧了,既然感到陌生,那我們就來研究下這個東西,純屬個人興趣愛好而已。

 

2.什麼是二進位制

二進位制是計算技術中廣泛採用的一種數制。二進位制資料是用0和1兩個數碼來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進位制系統,資料在計算機中主要是以補碼的形式儲存的。計算機中的二進位制則是一個非常微小的開關,用“開”來表示1,“關”來表示0。

資訊的儲存單位

位(Bit) :度量資料的最小單位

位元組(Byte):最常用的基本單位,一個位元組有8位

b7 b6 b5 b4 b3 b2 b1 b0

1    0    0    1    0   1   0   1  =27+24+22+20=149

K位元組          1k=1024 byte

M(兆)位元組   1M=1024K

G(吉)位元組    1G=1024M

T(太)位元組     1T=1024G

曾經聽人說,一個c,c++大神,就靠輸入,0和1就可以裝好作業系統,不知道是不是真的,嘿嘿

 

3.十進位制轉換

1234[10進位制] 0 1 2 3 4 5 6 7 8 9 0 當數位上的值超過9就要進1

1000+200+30+4=1*103+2*102+3*101+4*100=1234

1011[2進位制] 0 1 當數位上的值超過1就要進1

1*23+0*22+1*21+1*20=8+0+2+1=11

1011[8進位制]0 1 2 3 4 5 6 7 當數位上的值超過7就要進1

1*83+1*81+1*80=512+8+1=521

1011[16進位制]0 1 2 3 4 5 6 7 8 9 A B C D E F 當數位上的值超過15就要進1

1*163+1*161+1*160=4096+16+1=4113

當然其他進位制轉換成10進位制是最簡單的了,我想聰明的你肯定會了。

 

4.二進位制轉換

首先來看十進位制到二進位制:除2取餘數 最後把餘數倒過來 100101

比如:十進位制數37

所以轉換成的二進位制數字為:100101

再來八進位制到二進位制:一個八進位制的位拆分成一個三位的二進位制數

比如:[八進位制]616

6拆分成 110

1拆分成 001

6拆分成 110

所以轉換成的二進位制數字為:110001110

 

再來十六進位制到二進位制:一個八進位制的位拆分成一個四位的二進位制數

比如:[十六進位制]616

6拆分成 0110

1拆分成 0001

6拆分成 0110

所以轉換成的二進位制數字為:11000010110

 

5.八進位制轉換

十進位制到八進位制:除8取餘數 最後把餘數倒過來

同時我們也可以先將十進位制轉換成二進位制,然後將二進位制又轉換成八進位制

比如:2456 轉化成八進位制數字:4630

2456/8=307,餘0;
307/8=38,餘3;
38/8=4,餘6;
4/8=0,餘4。

將所有餘數倒序相連,得到結果:4630。

因此十進位制的2456轉換為八進位制結果為4630。

二進位制到八進位制轉換 7=4+2+1 111 八進位制最大的數字是7轉換成二進位制剛好是111,佔3個位

每三個二進位制數為一組,轉成一個八進位制數位,如果二進位制高位不足3位時,用零填補。

比如:10011011

010 011 011

2 3 3

因此二進位制的10011011轉換為八進位制結果為233。

十六進位制到八進位制

我們可以先把十六進位制的數字轉換成二進位制,在從二進位制轉換成八進位制例如:

3BC24

分別對應到二進位制就是:

3 0011
B 1011
C 1100
4 0100

連起來就是:

0011 1011 1100 0100

再按照每三個一組分組:

0 011 101 111 000 100

0__3__5__7__0__4

所以8進位制就是35704

 

6.十六進位制轉換

十進位制到十六進位制:除16倒著取餘數

同時我們也可以先將十進位制轉換成二進位制,然後將二進位制又轉換成十六進位制

比如說:1610轉換成十六進位制

直接轉16進位制:

1610/16=100……10(A);
100 /16= 6……4;
6 /16= 0……6;

故:1610(10)=64A(16).

二進位制到十六進位制 15=8+4+2+1 1111 十六進位制最大數字是F,即15轉換成二進位制1111,剛好佔4個位

每四個二進位制數為一組,轉成一個十六進位制數位,如果二進位制高位不足3位時,用零填補。

比如:1110011011

0011 1001 1011

3 9 B

因此二進位制的 1110011011轉換為十六進位制39B

八進位制到十六進位制

我們可以先把八進位制的數字轉換成二進位制,在從二進位制轉換成十六進位制

八進位制的:1234567

轉換為二進位制是每個數字轉換為三位二進位制:001 010 011 100 101 110 111

然後把這些數字從右邊開始進行按四位分組:0 0101 0011 1001 0111 0111

然後從右邊每四位組依次對應一個16進位制數:053977

 

7.各種進位制的用途

說了這麼多,這些進位制都有些什麼用了,大家一起討論下吧!!!

10進位制,當然是便於我們人類來使用,我們從小的習慣就是使用十進位制,這個毋庸置疑。

2進位制,是供計算機使用的,1,0代表開和關,有和無,機器只認識2進位制。

16進位制,記憶體地址空間是用16進位制的資料表示, 如0x8049324。

程式設計中,我們常用的還是10進位制。

比如:int a = 100,b = 99;

不過,由於資料在計算機中的表示,最終以二進位制的形式存在,所以有時候使用二進位制,可以更直觀地解決 問題。但二進位制數太長了。比如int 型別佔用4個位元組,32位。比如100,用int型別的二進位制數表達將是:

0000 0000 0000 0000 0110 0100

面對這麼長的數進行思考或操作,沒有人會喜歡。因此,用16進位制或8進位制可以解決這個問題。因為,進位制越大,數的表達長度也就越短。

1.用於計算機領域的一種重要的數制

2.對計算機理論的描述,計算機硬體電路的設計都是很有益的。比如邏輯電路設計中,既要考慮功能的完備,還要考慮用盡可能少的硬體,十六進位制就能起到一些理論分析的作用。比如四位二進位制電路,最多就是十六種狀態,也就是一種十六進位制形式,只有這十六種狀態都被用上了或者儘可能多的被用上,硬體資源才發揮了儘可能大的作用。

3.十六進位制更簡短,因為換算的時候一位16進位制數可以頂4位2進位制數。

8進位制,一般有什麼用,查了下資料,還真不知道?有知道的大神告訴我吧。

如果你用過linux你可能見過這樣表示一個檔案的許可權:0777、0666等等

可能有的這樣解釋:具有讀許可權加1,具有寫許可權加2,具有執行許可權加4,最後的和就是一個角色所具有的許可權。而linux有三種角色:屬主、屬組、其他使用者,所以用0777、0666之類的表示。

如果用二進位制來看的話,linux用3個bit來表示許可權,如果具有某個許可權就把那位置1.比如只具有讀許可權就是100,只具有寫許可權就是010,具有讀寫許可權就是110,具有讀寫執行許可權就是111。

 

8.結束

對於一個應用程式設計師,瞭解這些還是有一些好處的,我們現在開發都是一些高階語言,C#,Java,記憶體分配,垃圾的回收,都不用我們自己操心,這樣我們會有更多的時間去關注一些業務邏輯的處理。本人水平有限,文中如有什麼不妥,歡迎拍磚,大神就別看了,我寫此文章只是自己學習過程中的一個總結,如果你覺得本文不錯,幫我點個贊!!!

 

相關文章