說起二進位,十進位等大家都很熟悉,但是如果讓你相互轉換,你還會麼?
什麼是二進位
二進位是計算技術中廣泛採用的一種數制。二進位數據是用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
十進位轉換
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進位是最簡單的了,我想聰明的你肯定會了。
二進位轉換
首先來看十進位到二進位:除2取餘數 最後把餘數倒過來 100101
比如:十進位數37
所以轉換成的二進位數字為:100101
再來八進位到二進位:一個八進位的位拆分成一個三位的二進位數
比如:[八進位]616
6拆分成 110
1拆分成 001
6拆分成 110
所以轉換成的二進位數字為:110001110
再來十六進位到二進位:一個八進位的位拆分成一個四位的二進位數
比如:[十六進位]616
6拆分成 0110
1拆分成 0001
6拆分成 0110
所以轉換成的二進位數字為:11000010110
八進位轉換
十進位到八進位:除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
十六進位轉換
十進位到十六進位:除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
各種進位的用途
10進位,當然是便於我們人類來使用,我們從小的習慣就是使用十進位,這個毋庸置疑。
2進位,是供計算機使用的,1,0代表開和關,有和無,機器只認識2進位。
16進位,內存地址空間是用16進位的數據表示, 如0×8049324。
編程中,我們常用的還是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。