彙編基礎:二進制和十六進制

理解二進制十六進制的最佳方法是先透徹的領悟十進制計數系統十進制(Decimal)系統是基於10的計數系統(詞根Deci-表示10)。“基於10”指的是由10個數位(Digit)0到9來表示數。
使用“位置(Place Value)”,可以用不多的幾個數位(如10個十進制數位)來表示很大的數。所有計數系統的位置從最右邊開始,是基數的0次冪。從右往左,基數的冪依次增加1:
X4X3X2X1X0
基數是10時,前5個位值是: 104103102101100
對任何基數,前兩個位值是最容易計算的。任何數的0次冪是1,所以100=1。任何數的1次冪就是它本身,所以101 = 10。第三個位值也是容易計算的,只要簡單地用第二個位值乘以基數就可以。事實上,每一個位值都可以用它前面一個位值乘以基數計算出來。所以上面5個位值是:
100= 1 = 1

101= 1×10 = 10

102= 10×10 = 100

103= 100×10 = 1000

104= 1000×10 = 10000

根據位值來讀一個數,比如57 258,指的是有5個10 000,7個1 000,2個100,5個10,以及8個1。

就是說: 5×10 000 = 50 000 7×1 000 = 7 000 2×100 = 200 5×10 = 50 8×1 = 8 將這些結果相加,結果:50 000 + 7000 + 200 + 50 + 8=57 258。

我們對十進制非常熟悉。所以,我們很少會去考慮將一個數分解成位值。但是,這種方法對於闡明其他進制的數是非常至關重要的。          

二進制數   計算機從最底層來看,只不過是電子開關的集合而已。而數字和字符是由這些開關的狀態來表示的。由於一個開關僅有兩種狀態——“開”或者“關”,所以它使用二進制(Binary),或者說基數爲2的計數系統(詞根bi表示2)。一個基數爲2的系統僅僅有兩個數位:0和1。計算機通常將這兩個數位集合成8個位值,即一個字節(Byte)或八位組字節(Octet)。

這8個位值是: 2726252423222120 位值這樣計算:

20 = 1

21 = 1×2 = 2

22 = 2×2 = 4

23 = 4×2 = 8

24 = 8×2 = 16

25 = 16×2 = 32

26 = 32×2 = 64

27 = 64×2 = 128 所以一個二進制八位組的位值: 128 、64 、32 、16 、8 、4 、2 、1

 因此,二進制八位組10010111可以這樣理解:

1×128 = 128

0×64 = 0

0×32 = 0 1×16 = 16

0×8 = 0

1×4 = 4

1×2 = 2

1×1 = 1

或者:128 + 16 + 4 + 2 + 1 = 151 對於二進制數,因爲每一個位值要麼就是該值本身,要麼就沒有,所以比較簡單。

另外一個例子:11101001 = 128 + 64 + 32 + 8 + 1 = 233。就是說,將二進制轉換爲十進制僅僅是一個將位值相加的過程,將十進制轉換爲二進制僅僅是將位值相減的過程。

例如,要將十進制數178轉爲二進制,首先把178減去最高的位值:

1、178大於128,所以我們就知道在該位值上有一個1: 178 – 128 = 50。

2、50比64小,該位值上有一個0。

3、50比32大,所以該位值上有一個1:    50 – 32 = 18。

4、18比16大,該位值上有一個1:    18 – 16 = 2。

5、2比8小,該位值上有一個0。

6、2比4小,該位值上有一個0。

7、2等於2,該位值上有一個1:    2 – 2 = 0。

8、0小於1,該位值上有一個0。

把這些步驟的結果綜合起來,用二進制表示178是:10110010。

另外一個例子可能會有幫助。給出110:

1、110比128小,所以在該位值上有一個0。

2、110比64大,所以在該位值上有一個1:    110 – 64 = 46。

3、46比32大,所以在該位值上有一個1:    46 – 32 = 14。

4、14比16小,所以在該位值上有一個0。

5、14比8大,所以在該位值上有一個1:    14 – 8 = 6。

6、6比4大,所以在該位值上有一個1:    6 – 4 = 2。

7、第2個位值上有一個1:    2 – 2 = 0。

8、0比1小,所以在該位值上有一個0。 所以,110用二進制表示就是:01101110。 

 

十六進制數   寫一個二進制八位組並不有趣。對於經常要使用這些數字的人來說,受歡迎的是更簡潔的表示法。一個可能的表示法是爲每一個可能的八位組分配一個單獨的字符。但是,8位有28 = 256種不同的組合,所以,用單獨的字符表示所有八位組需要256個數位,或者說一個基數爲256的計數系統。 將一個八位組看作是兩個各4位的組合或許會更簡單一些。例如,11010011可以看作是1101和0011。對4個位來說,有24 = 16種不同的組合,所以有基數16,或者說十六進制(Hexadecimal)計數系統,一個八位組可以用兩位來表示(詞根hex的意思是“six”,deci的意思是“ten”)。

十六進制 十進制 二進制

0 0 0000

1 1 0001

2 2 0010

3 3 0011

4 4 0100

5 5 0101

6 6 0110

7 7 0111

8 8 1000

9 9 1001

A 10 1010

B 11 1011

C 12 1100

D 13 1101

E 14 1110

F 15 1111  

因爲十六進制和十進制的前10個數字是一樣的,所以我們有意在一個十六進制數前面加0x,或者在後面加一個h,以便和十進制數區分開。例如,十六進制數9應該寫成0x9或者9h。 剛纔學過二進制的表示法,很容易寫出一個4位二進制數的十進制表達形式。同樣也很容易將一個十進制數轉爲十六進制。

於是,我們可以很容易地通過3個步驟將一個二進制八位組轉爲十六進制:

1、將八位組分成2個4位的二進制數。

2、將每個4位二進制數轉爲十進制。

3、把每個十進制數用十六進制來表示。

例如:把11010011轉爲十六進制:

1、11010011變成1101和0011。

2、1101 = 8 + 4 + 1 = 13,0011 = 2 + 1 = 3。

3、13 = 0xD,3 = 0x3。 所以,11010011用十六進制表示就是0xD3。

把十六進制轉爲二進制是上述3步的簡單逆序。例如,把0x7B轉爲二進制:

1、0x7 = 7,0xB = 11。

2、7 = 0111,11 = 1011。

3、把2個4位二進制數寫在一起就是0x7B = 01111011,十進制爲123。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章