1. 程式人生 > >網路通訊預備篇:進位制計數

網路通訊預備篇:進位制計數

只要記住你的名字,不管你在世界的哪個地方,我一定會去見你。
                                                         ——電影《你的名字》

在我們的日常生活中,每個人的名字對應一個唯一的身(敏)份(感)證(詞)號,在Internet上也是一樣,每臺主機(Host),包括所有的具有上網功能的電子裝置都有IP地址,有了IP地址,這些電子裝置聯網之後,才能正常通訊。

要了解和熟練掌握IP地址和子網的劃分,首先必須要對進位制數計數有一定的認識,本篇為預備知識:掌握十進位制、二進位制、十六進位制、八進位制以及它們之間的關係和互相轉換。

二、計算機中進位制之間的關係和轉換

1、計算機中常見的進位制

我們的日常生活中常見的十進位制,計算機的執行計算基礎就是基於二進位制來執行,可以簡單的理解為:1代表通電(開),0代表斷電(關),只是用二進位制執行運算,用其他進製表現出來。十六進位制常見於記憶體地址,登錄檔regedit,MAC地址等。 而計算機中八進位制比較少見不常用,一般用於某些程式語言。

計算機本身使用的就是二進位制,但是使用起來很不方便的,十六進位制或八進位制可以很好的解決這個問題(換算的時候1位十六進位制數可以用4位二進位制數代替,1位八進位制數可以用3位二進位制數代替)。因為進位制越大,數的表達長度也就越短,例如:二進位制數111111111111用十六進位制表示為FFF,這樣更簡短,比較節省空間,方便讀,也方便記。

IP地址和子網劃分學習筆記之《預備知識:進位制計數》

2、十進位制、二進位制、十六進位制、八進位制之間對照表

IP地址和子網劃分學習筆記之《預備知識:進位制計數》

3、二進位制、八進位制、十六進位制數轉換成十進位制

十進位制可以有多位組成,根據十進位制的運算規則:逢10進1,借1當10,從右向左依次為個位、十位、百位、千位、萬位...
(1024)10 = 1×10^3+0×10^2+2×10^1+4×10^0
= 1000+0+20+4
=(1024)10

由此類似,那麼二進位制的運算規則:逢2進1,借1當2,也可以由多位陣列成,從右向左分別為1位、2位、4位、8位、16位...
IP地址和子網劃分學習筆記之《預備知識:進位制計數》
為什麼稱二進位制的位數為1位、2位、4位...?
這其實要從十進位制的角度看二進位制各位數得出的名稱,如下表:
IP地址和子網劃分學習筆記之《預備知識:進位制計數》

從上表可以看出,當二進位制產生進位時,代表的十進位制數為2、4、8、16、32、64、128...
二進位制雖然只有0和1兩個數字,但是由於數字所處的位置不同,表示的資料也不同
例如:
二進位制數 “1101”這個二進位制數共有4位,由3個1和1個0組成,比如數字1所處位置不同,所代表的大小也不同,其所處位置稱作權。從右向左順序各個位表示十進位制的含義:

第一個1表示:1的個數
第二個0表示:2的個數
第三個1表示:4的個數
第四個1表示:8的個數

(在此可以類比十進位制1101,由1個1000,1個100,0個10,1個1組成。)
所以,二進位制數1101由1個8,1個4,0個2,1個1組成。按各位的權列出:
(1101)2 = 1×2^3+1×2^2+0×2^1+1×2^0
= 8+4+0+1
=(13)10

這種權展開式可以很方便將二進位制轉換為十進位制。
同理,將八進位制數1024轉換為十進位制數
(1024)8 = 1×8^3+0×8^2+2×8^1+4×8^0
= 512+0+16+4
=(532)10

將十六進位制數2B5F轉換為十進位制數
(2B5F)16 = 2×16^3+B×16^2+5×16^1+F×16^0
= 2×16^3+11×16^2+5×16^1+15×16^0
= 8192+2816+80+15
=(11103)10

由此我們可以得到一個非十進位制數轉換為十進位制數的自定義公式:
(X)Z = Xn-1×Z^n-1+ Xn-2×Z^n-2+…+ X1×Z^1+ X0×Z^0
=(Y)10
X表示一個非二進位制(多位),Y表示一個十進位制數(多位),Z表示各進位制的基數,n表示位數。

4、十進位制轉換成二進位制、十六進位制、八進位制

十進位制轉換成二進位制整數就通常採用“除2取餘,逆序排列”的方法。具體做法是用2整除十進位制整數,可以得到一個商和餘數,再用2去除商,又會得到一個商和餘數,如此反覆,直到商為0停止。再把先得到的餘數作為二進位制低位有效位,後得到的餘數作為二進位制高位有效位,依次排列。
舉個示例:將十進位制“11”轉換為二進位制
IP地址和子網劃分學習筆記之《預備知識:進位制計數》
將十進位制11轉換為二進位制數為1011,表示為:(11)10 =(1011)2

同樣的,十進位制轉換為十六進位制,採用“除16取餘,逆序排列”的方法,十進位制轉換為八進位制採用“除8取餘,逆序排列”的方法。

5、進位制之間轉換小技巧

1位十六進位制等於4位二進位制
1位八進位制等於3位二進位制

由於十六進位制和八進位制的基數問題(太大或不太好算),它們的“冪次方”和“除基數取餘”計算起來比較麻煩,為了方便計算,通常建議先把它們轉換位二進位制後再繼續轉換為相應的進位制。

轉載地址:http://blog.51cto.com/6930123/2111068