書名: 計算機系統解密:從理解計算機到編寫高效代碼作者名: (美)喬納森·E.斯坦哈特本章字數: 1174字更新時間: 2021-09-27 16:56:58
1.8 處理二進制數的簡單方法
眾所周知,長時間對著顯示器處理二進制數會有失明的危險,它會讓人視覺疲勞!人們想出了一些讓二進制數字更容易閱讀的方法。下面將介紹其中的幾種方法。
1.8.1 八進制表示法
其中一個節約用眼的方法是八進制表示法。八進制的意思是底數為8,而八進制表示法背后的思想是將3位當作一組。3位可以用來表示23,或者表示0~7的8個值。假設有一些巨大的二進制數,比如100101110001010100。這個數讀起來很傷眼睛。圖1-14展示了如何把二進制數轉化為八進制表示。

圖1-14 二進制數的八進制表示
如你所見,我們將位分組,每組3位,并將八進制值分配給每一組,得到456124,這樣讀起來就簡便多了。要得到100的八進制值,只需簡單地將其作為二進制數來處理:(1×22)+(0×21)+(0×20)= 4。
1.8.2 十六進制表示法
八進制表示法現在仍在使用,但沒有過去那么廣泛了。十六進制表示法(底數為16)已經基本取代了八進制表示法,因為現在的計算機都是以8位的倍數為單位,可以整除4,但不可以整除3。
將我們熟悉的十進制數字中的一些符號轉換為二進制很容易,因為只需要其中的0和1。對于八進制,只需要10個數字中的8個。但是對于十六進制,需要16個,這比我們現有的10個數字要多。我們需要一些符號來代表10~15。我們假設符號a、b、c、d、e、f(或A、B、C、D、E、F)分別代表10~15。假設有一個可怕的二進制數,比如11010011111111000001,圖1-15顯示了如何將其轉換為十六進制。

圖1-15 二進制數的十六進制表示
在這個例子中,我們把4個位作為一組,然后將16個符號值(0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f)中的一個分配給每一組。例如,1101(第一個4位的組)在十六進制中將用d表示,因為它的值為十進制1×(23)+1×(22)+0×(21)+1×(20) = 13,而d代表數字13。將下一個4位的組映射到另一個符號,以此類推。最終11010011111111000001轉換為十六進制中的d3fc1。表1-9展示了便捷的十六進制值列表,你可以參考這些值,直到它刻在你的腦海里。
表1-9 二進制數與十六進制數的轉化

1.8.3 表示語境
怎么知道該如何解釋一個數字?比如數字10,如果是二進制數,那么就是2;如果是八進制數,那么就是8;如果是十進制數,那么就是10;如果是十六進制數,那么就是16。數學書上使用下標進行區分,所以我們可以寫為102、108、1010或1016,但是用電腦鍵盤輸入下標很不方便。如果能有一個一致的記號就好了,但悲哀的是,很多人認為自己有更好的方法,因而會自己發明新的記號,于是我們曾使用過一堆記號。許多計算機編程語言都使用了以下記號法:
- 以0開頭的數字表示八進制數,例如017。
- 以1~9開頭的數字表示十進制數,例如123。
- 以0x為前綴的數字表示十六進制數,例如0x12f。
請注意,我們無法區分八進制0和十進制0,但是這并不重要,因為八進制0和十進制0是相同的。很少有編程語言有二進制的記號,因為它確實不怎么使用了,而且往往可以從語境判斷。有些語言,如C++,用0b前綴來表示二進制數。
- 從零構建知識圖譜:技術、方法與案例
- 軟件測試工程師面試秘籍
- 薛定宇教授大講堂(卷Ⅳ):MATLAB最優化計算
- Mastering Ubuntu Server
- Linux環境編程:從應用到內核
- 深度學習:算法入門與Keras編程實踐
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- 微信小程序入門指南
- Python機器學習算法: 原理、實現與案例
- Linux Shell核心編程指南
- 區塊鏈技術進階與實戰(第2版)
- OpenCV with Python By Example
- Python網絡爬蟲實例教程(視頻講解版)
- 深度學習入門:基于Python的理論與實現
- Visual C++從入門到精通(第2版)