標籤:二進位、十進位、十六進位、進位轉換
談談電腦和網路常用進位制:二進位(Binary)、十進位(Decimal)和十六進位(Hexadecimal)
二進位、十進位和十六進位,這幾個個進位裡算十進位我們最熟悉了,從學前教育或者幼兒園最先接觸的數學到再我們日常生活幾乎天天和他打交道的下面這十個數字。
650) this.width=650;" title="clip_image002" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;padding-right:0px;" alt="clip_image002" src="http://s3.51cto.com/wyfs02/M02/6C/AD/wKiom1VP_0mTBCvIAAE-eKQOWUU639.jpg" border="0" height="285" />
但是,話又說回來,你真的理解這10個數字嗎?或者說你理解十進位嗎?
今天我們就以十進位為切入點順便談談二進位、十六進位以及它們之間的轉換。在談這些進位之前我們先瞭解一下進位的概念:
所謂進位就是進位制,是人們規定的一種進位方法。進位制/位置計數法是一種記數方式,故亦稱進位記數法/位值計數法,可以用有限的數字記號代表所有的數值。可使用數字記號的數目稱為基數或底數(radix),基數為n,即可稱n進位制,簡稱n進位。
對於任何一種進位制---n進位,就表示某一位置上的數運算時是逢“n”自右至左進一位。 十進位是逢“十”進一,十六進位是逢“十六”進一,“二”進位就是逢二進一,以此類推,n進位就是逢n進位。現在最常用的是十進位,通常使用10個阿拉伯數字0-9進行記數。
注意:十進位是0-9十個數值進行記數,而不是1-10,其他進位也同樣n進位就是用0--(n-1)的數字進行記數而不是0-n。
650) this.width=650;" title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;border-left:0px;padding-right:0px;" alt="image" src="http://s3.51cto.com/wyfs02/M00/6C/AD/wKiom1VP_0rA0F_RAACV8N2fFRY468.jpg" border="0" height="132" />
計數值:等於把上面的各個儲存格的值乘以儲存格執行個體的值最後再把所有儲存格乘出的值相加。
以上面的執行個體的值為例:1X億 + 2X千萬 + 3X百萬 + 4X十萬 + 5X萬 + 6X千 + 7X白 + 8X十 + 9X1=123456789.
十進位非常容易理解,因為我們從小就接觸它,所以對它非常熟悉。假如突然讓你轉到二進位標記,而且日常生活都用二進位計數的話,會出現什麼情況?答案是你幾乎會瘋掉,因為二進位一般是讓電腦去理解並使用它的而不是為我們的日常生活中使用它而設計的,因為二進位只有兩個數值0和1進行計數,如果一個龐大的數字用二進位表示的話,那麼會是一竄很長的數字。如11011011這讓你看起來像個符文,而不能馬上說出它的值,然而電腦卻不然,它更喜歡讀取使用這種“符文”。
其實在學網路的時候特別是接觸IP地址的時候,你需要真正明白二進位以及二進位和十進位、十六進位之間的轉換,這是很重要的。下面就開始介紹二進位,它非常簡單,二進位只使用數字0和1,其中每個數值對應一位(二進位位),二進位位按從右向左的順序排列,每向左移動一位,位值就翻一倍。通常我們將每4位或者八位作為一組,分別稱它們為半位元組(nibble)和位元組(Byte)。
650) this.width=650;" title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;padding-right:0px;" alt="image" src="http://s3.51cto.com/wyfs02/M01/6C/AD/wKiom1VP_0uwhLhJAABGQSxPxIU382.jpg" border="0" height="104" />
650) this.width=650;" title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;border-left:0px;padding-right:0px;" alt="image" src="http://s3.51cto.com/wyfs02/M02/6C/AD/wKiom1VP_0zh4ktwAACJMjooOFk553.jpg" border="0" height="150" />
計數值:等於把上面的各個儲存格的值乘以實儲存格執行個體的值最後再把所有儲存格乘出的值相加。
以上面的執行個體的值為例:1X128 + 0X64 + 1X32 + 0X16 + 1X8 + 0X4 + 1X2 + 0X1=
128+0+32+0+8+0+2+0=170
二進位和十進位之間的轉換
上面已經介紹了十進位和二進位,下面就介紹他們之間如何轉換。下表列出了半位元組和位元組中各位代表的十進位值。
半位元組中各位的位值 |
位元組中各位的位值 |
8 4 2 1 |
128 64 32 16 8 4 2 1 |
這意味著,如果某一位的值取值為1,則計算半位元組或者位元組對應的十進位值時,應將其位值與其所有取值為1的位值相加。如果為0則不考慮。
如果半位元組的每一位都為1,則將8、4、2和1相加,結果為15—半位元組的最大取值。假設半位元組的取值為1010,即對應位為1的位值為8和2,則對應的十進位值為8+2=10.
同理,位元組的轉換方法和半位元組一樣,但是位元組的取值要比半位元組的最大取值15大得多,如果位元組的每位都為1,則其取值如下(位元組有8個位):
128+64+32=16+8+4+2+1=255。
650) this.width=650;" title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;border-left:0px;padding-right:0px;" alt="image" src="http://s3.51cto.com/wyfs02/M00/6C/AD/wKiom1VP_02hzS4nAADQ-Zb2Hvo871.jpg" border="0" height="228" />
十進位到二進位的轉換就是上面方法的相反過程,方法如下:
1. 先取和該十進位值最接近的並且小於該十進位大小的一個二進位位值。
2. 用十進位值減去剛剛的接近值,得出的差。
3. 按照第一、二步接著取第二個,第三個以此類推。
4. 得到差為0.
5. 把所有位值並所得的結果進行“或”運算,運算的結果就是對應的二進位值。
下面用一個執行個體來說明:
如十進位234轉換為二進位。
和234最接近大小的二進位位值為224(11100000)
234-224=10
和10最接近的二進位位值為8(00001000)
10-8=2(00000010)
對上面的二進位進行與運算:
11100000
00001000
00000100
11101100
十六進位和二進位、十進位之間的轉換
十六進位與二進位和十進位完全不同,我們通過讀取半位元組將二進位轉換為十六進位。為什麼呢?因為一個半位元組剛好滿足一個十六進位的最大值15。即半位元組的所有位都取1。
1111,十進位值為8+4+2+1=15。十進位使用0—9十個數字而十六進位除了使用十進位的十個數字外另外6個用啥代替呢?10、11、12、13、14、15嗎?那可不行,因為10—15這6個數字不是二位元,因此我們使用A、B、C、D、E、F來代表10、11、12、13、14、15。
每個十六進位字元相當於半位元組,而兩個十六進位字元就相當於一位元組。要計算該十六進位數對應的二進位值,即可將這兩個十六進位字元分別轉為二進位的半位元組,然後將他們合并為一個位元組即可。下面用幾個執行個體介紹一下十六進位和二進位、十進位之間的轉換方法:
執行個體1、十六進位0x7B(一般以0x首碼代表後面的數十十六進位)轉為二進位和十進位。
轉為二進位:
上面講過,十六進位的每個字元 為半個位元組,我們分別來拆開來看:7=0111而B=1011,因此整個位元組為01111011。
轉為十進位:
7 X (16)1 + B X (16)0 = 112 + 11 = 123。
執行個體2、二進位10110101轉換為十六進位和十進位。
轉為十六進位:
先把10110101位元組拆為兩個位元組:1011和0101。1011對應的十六進位字元為B(8+0+2+1),0101對應的十六進位字元為5(0+4+0+1),所以十六進位的值為0xB5。
轉換為十進位:
128 + 32 + 16 + 4 + 1 = 181
其實對於任何一個數,我們可以用不同的進位制來表示。比如:十進數57(10),可以用二進位表示為00111001(2),也可以用五進位表示為212(5),也可以用八進位表示為71(8)用十六進位表示為39(16),它們所代表的數值都是一樣的,只是我們日常生活中習慣於用十進位來表示而電腦常用二進位和十六進位來表示而已!
好了,本篇文章就到此結束,希望給剛接觸電腦或者網路領域的朋友能有個好的開始!
本文出自 “E網情深” 部落格,請務必保留此出處http://jettcai.blog.51cto.com/1447637/1650127
談談電腦和網路常用進位制:二進位(Binary)、十進位(Decimal)和十六進位(He