您好,登錄后才能下訂單哦!
二進制、十進制和十六進制,這幾個個進制里算十進制我們最熟悉了,從學前教育或者幼兒園最先接觸的數學到再我們日常生活幾乎天天和他打交道的下面這十個數字。
但是,話又說回來,你真的理解這10個數字嗎?或者說你理解十進制嗎?
今天我們就以十進制為切入點順便談談二進制、十六進制以及它們之間的轉換。在談這些進制之前我們先了解一下進制的概念:
所謂進制就是進位制,是人們規定的一種進位方法。進位制/位置計數法是一種記數方式,故亦稱進位記數法/位值計數法,可以用有限的數字符號代表所有的數值。可使用數字符號的數目稱為基數或底數(radix),基數為n,即可稱n進位制,簡稱n進制。
對于任何一種進位制---n進制,就表示某一位置上的數運算時是逢“n”自右至左進一位。 十進制是逢“十”進一,十六進制是逢“十六”進一,“二”進制就是逢二進一,以此類推,n進制就是逢n進位。現在最常用的是十進制,通常使用10個阿拉伯數字0-9進行記數。
注意:十進制是0-9十個數值進行記數,而不是1-10,其他進制也同樣n進制就是用0--(n-1)的數字進行記數而不是0-n。
計數值:等于把上面的各個單元格的值乘以單元格實例的值最后再把所有單元格乘出的值相加。
以上面的實例的值為例:1X億 + 2X千萬 + 3X百萬 + 4X十萬 + 5X萬 + 6X千 + 7X白 + 8X十 + 9X1=123456789.
十進制非常容易理解,因為我們從小就接觸它,所以對它非常熟悉。假如突然讓你轉到二進制計數法,而且日常生活都用二進制計數的話,會出現什么情況?答案是你幾乎會瘋掉,因為二進制一般是讓電腦去理解并使用它的而不是為我們的日常生活中使用它而設計的,因為二進制只有兩個數值0和1進行計數,如果一個龐大的數字用二進制表示的話,那么會是一竄很長的數字。如11011011這讓你看起來像個符文,而不能馬上說出它的值,然而電腦卻不然,它更喜歡讀取使用這種“符文”。
其實在學網絡的時候特別是接觸IP地址的時候,你需要真正明白二進制以及二進制和十進制、十六進制之間的轉換,這是很重要的。下面就開始介紹二進制,它非常簡單,二進制只使用數字0和1,其中每個數值對應一位(二進制位),二進制位按從右向左的順序排列,每向左移動一位,位值就翻一倍。通常我們將每4位或者八位作為一組,分別稱它們為半字節(nibble)和字節(Byte)。
計數值:等于把上面的各個單元格的值乘以實單元格實例的值最后再把所有單元格乘出的值相加。
以上面的實例的值為例: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。
十進制到二進制的轉換就是上面方法的相反過程,方法如下:
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),它們所代表的數值都是一樣的,只是我們日常生活中習慣于用十進制來表示而計算機常用二進制和十六進制來表示而已!
好了,本篇文章就到此結束,希望給剛接觸計算機或者網絡領域的朋友能有個好的開始!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。