進制及進制的轉換
了解進制的概念及進制的轉換是學習逆向的基礎,因為計算機使用的進制是二進制,它又不同于我們現實生活中使用的十進制,因此我們必須學習不同的進制及進制之間的轉換。
現實生活中的進制與計算機的二進制
我們在現實生活中會接觸到多種多樣的進制,通常見到的有十進制、十二進制和二十四進制等。下面分別對這幾種進制進行舉例說明。
十進制是每個人從上學就開始接觸和學習的進制表示方法。所謂的十進制,就是逢十進一,最簡單的例子就是9+1=10。這個無需過多解釋。
十二進制也是我們日常生活中常見的表示方法。所謂的十二進制,就是逢十二進一,例如12個月為1年,13個月就是1年1個月。
二十四進制也是我們日常生活中常見的表示方法。所謂的二十四進制,就是逢二十四進一,例如24小時為1天,25小時就是1天1小時。
介紹了以上現實生活中的例子后,我們再來說說計算機中的二進制。根據前面各種進制的解釋,我們可以想到,二進制就是逢二進一。這里舉個不太恰當的例子,例如2斤就是1公斤。
在計算機中為什么使用二進制呢?簡單說就是計算機用高電平和低電平來表示1和0最為方便和穩定,高電平被認為是l,低電平被認為是0,這就是所謂的二進制的來源。由于二進制在閱讀上不方便,計算機又引入了十六進制來直觀地表示二進制。所謂的十六進制,就是逢十六進一。
因此在計算機中,我們常見的數據表示方法有二進制、十進制和十六進制。
進制的定義
在學習小學數學的時候我們就學習了十進制,十進制一共有十個數字,從0一直到9,9再往后數一個的時候要產生進位,也就是逢十進一。總結十進制的定義則是,由0到9十個數字組成,并且逢十進一。
舉一反一地來說,二進制的定義是,由0到1兩個數字組成,逢二進一。十六進制的定義是由0到9十個數字和A到F六個字母組成,逢十六進一。
由此,我們衍生出N進制的定義是,由N個符號組成,逢N進一。
下表所列為這三種進制的數字表。
數制 | 基數 | 數字 |
二進制 | 2 | 0 1 |
十進制 | 10 | 1 2 3 4 5 6 7 8 9 |
十六進制 | 16 | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
進制的轉換
在逆向當中,我們直接面對的通常是十六進制,而由于很多原因,我們需要將其當作十進制或二進制來查看,當然也有可能需要根據二進制轉換成十六進制或十進制。所以,我們就需要掌握進制之間的轉換。
二進制轉十進制
二進制整數的每個位都是2的冪次方,最低位是2的0次方,最高為是2的(N-1)次方,我們通過一個例子進行說明。我們把二進制數10010011轉換成十進制數,計算方式如下:
10010011=1×27+0×26+0×25+1×24+0×23+0×22+1×21+1×20=128+0+0+16+0+0+2+1=147
十六進制與二進制的轉換
由于一個簡單的數值用二進制表示需要很長的位數,這樣對于閱讀很不方便,因此匯編和調試器常用十六進制表示二進制。十六進制的每個位可以代表4個二進制位,因為2的4次方剛好是16。這樣,在二進制與十六進制之間就產生了一個很好的對應關系,如下表。
二進制 | 十進制 | 十六進制 | 二進制 | 十進制 | 十六進制 |
0000 | 0 | 0 | 1000 | 8 | 8 |
0001 | 1 | 1 | 1001 | 9 | 9 |
0010 | 2 | 2 | 1010 | 10 | A |
0011 | 3 | 3 | 1011 | 11 | B |
0100 | 4 | 4 | 1100 | 12 | C |
0101 | 5 | 5 | 1101 | 13 | D |
0110 | 6 | 6 | 1110 | 14 | E |
0111 | 7 | 7 | 1111 | 15 | F |
根據此表,我們可以很快地把二進制和十六進制進行轉換,把上例的二進制10010011轉換成十六進制,轉換過程如下:
第一步,把10010011從最低開始按每四位分為一組,不足四位前面補0,劃分結果為1001 0011
第二步,把劃分好的組進行查表,1001對應十六進制是9,0011對應的十六進制是3。那么,二進制10010011轉換成十六進制后的值是93。
在逆向中常用的就是二進制與十進制的轉換,或者是二進制與十六進制的轉換,其他的轉換方式可以自行查找資料進行學習。關于十六進制和二進制需要記住的重要一點就是。
一位十六進制數可以表示四位二進制數。