本節內容:二進位。
為什麼電子計算機使用二進位?:電子計算機電路只有低和高兩種狀態,分別代表二進位數 0 和 1。
二進位的簡寫形式:計算機中的資料使用二進位數。 但是二進位寫起來不方便,所以我們通常使用十六進製作為二進位的簡寫形式來表示二進位數。
鹼基之間的轉換:4 位二進位數表示為 1 位十六進製數 0 f。 4 位二進位數表示 1 位十進位數 0 9。 二進位或十六進製數使用位權重方法轉換為十進位數。 十進位數使用除法轉換為二進位數或十六進製數。
我們可能有這樣的想法,如果計算機首先在十進位系統中發明,而不必來回轉換,那就太好了,而且我們對十進位系統非常熟悉。
也有人會說二進位有多好,簡單高效。 事實上,這種說法是錯誤的。 十進位算術邏輯運算比二進位運算效率高得多。 畢竟,要計算的步驟要少得多。
事實上,真正使用二進位的原因是電子計算機受到計算機物理硬體的約束。 電子計算機電路只有0和1兩種穩定狀態,二進位是電子計算機最合理的選擇。 而且,二進位算術邏輯運算與十進位算術邏輯運算相同,不影響計算結果的正確性,但二進位算術邏輯運算的效率低於十進位系統。 由於電子計算機的計算速度足夠快,可以彌補效率低下的缺點。 因此,儲存在計算機中的任何資料和指令都由二進位數 0 和 1 組成。
事實上,電子計算機的理論基礎早在100多年前就已經完成,但當時受到材料和工藝的制約。 當電子管和積體電路被發明出來時,有了合適的材料,電子計算機自然而然地被發明出來了。
量子計算機肯定不會再使用二進位,因為量子屬性可以同時具有多種狀態,而量子計算機肯定會比只有 0 和 1 的二進位高效得多。 然而,目前量子計算機仍然受到製造工藝、材料和成本的制約,一旦這些問題得到解決,量子計算機的普及和應用肯定可以迅速實現。
寫十進位數 0 15:使用 4 位二進位數
二進位數寫起來比較麻煩,可以縮寫為二進位形式,即十六進製表示。
寫十進位數 0 15:使用十六進製數
0 1 2 3 4 5 6 7 8 9 a b c d e f。
顯然,十六進製數字更容易書寫,效率更高。 在未來的學習過程中,我們經常會用到偵錯程式、編譯器、記憶體分析工具、二進位文字工具等工具,都用十六進製來表示二進位數。
二進位和十六進製之間的轉換
表 2-1 二進位和十六進製系統之間的轉換。
二進位和十進位系統之間的轉換
表2-2 二進位和十進位系統之間的轉換
如表2-1和表2-2所示,每個十進位數或十六進製數對應乙個四位數的二進位數。
十進位數 0 9 對應乙個 4 位二進位數,稱為 8421 BCD 碼,我們將在第 4 章通用編碼規則中詳細解釋 BCD 碼。
二進位數到十進位數
表 2-3 二進位數。
將上述二進位數轉換為相應的十進位數。
演算法:位權重表示法將 n 位二進位整數轉換為十進位數(不考慮正數和負數)。
dec=(dn-1×2n-1)+(dn-2×2n-2)+.d1 21)+(d0 20)注:公式中的n表示二進位位數,10110101b=1*27+0*26+1*25+1*24+0*23+1*22+0*21+1*20=128+32+16+4+1=181d(d代表十進位),可以使用查表的方法得到2的冪。
表 2-4 2 位的位權重。
十進位數到二進位數
演算法::十進位數重複除以 2,每次的餘數記錄為當前二進位數字的值,直到。
商為 0,直到為 0。 例如,十進位數 57 轉換為二進位數。
表2-5 十進位數到二進位除法的轉換
二進位數111001是通過將餘數系列中的數字倒排列得到的,因為intel儲存的二進位數字總是8或8的倍數,所以前面空白處的二進位數0和57是0011 1001b。
十六進製數到十進位數
表2-6 十六進製數轉換為二進位數。
演算法::位權重表示法將 n 位無符號十六進製整數轉換為十進位數(無論正數和負數如何),dec=(dn-1 16n-1)+(dn-2 16n-2)+公式 d1 161) + (d0 160) 中的 n 表示十六進製數字,16a794h=1*165+6*164+10*163+7*162+9*161+4*160=
表2-7 十六進製位的位權重
十進位數到十六進製數
演算法:
十進位數重複除以 16,每次的餘數記錄為當前十六進製數字的值,直到。
商為 0,直到為 0。 例如,十進位數 422 轉換為十六進製數。
表2-8 十進位數與十六進製數的劃分
十六進製數 1a6h 是通過重新排列餘數序列中的數字而得到的,因為儲存在 Intel 中的二進位數字始終是 8 或 8 的倍數,因此前面空白處的十六進製數 0,422 是 01a6h。
實踐。 1.用十六進製表示以下二進位數(不允許使用計算器和計算)。
2.用二進位表示以下十六進製數(不允許使用計算器和計算)。
487fdc120ace69b953fe。
3.將以下二進位數轉換為十進位正整數(先使用演算法,然後使用計算器檢查)。
00100111b 101101101111b 01100001b
4.將下面的小數正整數轉換為二進位數(先使用演算法,然後使用計算器檢查)。
121d 2345d 13124d 121798d
5. 將以下十六進製正整數轉換為十進位數(先使用演算法,然後用計算器檢查)。
87dafh 875b3fh 7a8cbffh 1234h
6.將下面的十進位正整數轉換為十六進製數(先使用演算法,然後使用計算器檢查)。
412434d 3643d 643262d 345d
本文節選自程式設計大師系列教材《x86組合語言基礎教程》。