- 計算機應(yīng)用基礎(chǔ)項目化教程
- 梁欽水 許維進
- 3770字
- 2019-10-18 19:31:18
任務(wù)三 計算機的編碼
任務(wù)描述
在馮·諾依曼計算機中,所有信息均采用二進制編碼,也就是計算機內(nèi)部表示信息、處理信息均采用二進制編碼形式,稱為數(shù)字化信息。信息必須先轉(zhuǎn)換成數(shù)字化信息計算機才可以處理,目前計算機可以處理的信息包括:數(shù)字、字符、文字、圖形、圖像、聲音、動畫等,然而這些信息是如何用二進制形式來表示的呢?或者說如何給這些信息編碼呢?本任務(wù)對數(shù)字、字符、文字如何轉(zhuǎn)換成數(shù)字化信息作簡單的介紹。
任務(wù)實施
1.數(shù)的編碼
數(shù)制是指用一組固定的數(shù)碼和統(tǒng)一的規(guī)則來表示數(shù)值的方法。日常中采用的數(shù)制是十進制,除此之外有時也用到八進制和十六進制,而在計算機內(nèi)部采用的數(shù)制是二進制。因此,數(shù)的編碼就是將常用數(shù)制轉(zhuǎn)換成二進制數(shù)。雖然這些數(shù)制各不相同,但是它們表示數(shù)值的方法卻是相似的,都是用若干個數(shù)碼的組合來表示數(shù)值,所表示數(shù)值的大小等于各數(shù)碼所代表數(shù)值之和。換言之,任何一種數(shù)制表示的數(shù)值都可以寫成各數(shù)碼所代表數(shù)值之和(稱為通式)。例如,用數(shù)碼an…a0組合表示數(shù)值N,則通式為N=an×mn+an-1mn-1+…+a0×m0。
其中,m是數(shù)制基數(shù),也就是數(shù)制所使用數(shù)碼的個數(shù),mi是第i項數(shù)碼ai的權(quán)值,數(shù)值N中最右邊數(shù)碼a0是0項,最左邊數(shù)碼an是n項,數(shù)碼組合中各數(shù)碼所代表數(shù)值等于數(shù)碼與其權(quán)值乘積。
(1)十進制
數(shù)碼:十進制用來表示數(shù)的數(shù)碼有10個:0、1、2、3、4、5、6、7、8、9。
基數(shù):十進制的基數(shù)是10。
權(quán)值:第i項數(shù)碼ai的權(quán)值是10i。
通式:N=an×10n+an-1×10n-1…+a0×100。
例如:(128)10=1×102+2×101+8×100。
(2)八進制
數(shù)碼:八進制用來表示數(shù)的數(shù)碼有8個:0、1、2、3、4、5、6、7。
基數(shù):八進制的基數(shù)是8。
權(quán)值:第i項數(shù)碼ai的權(quán)值是8i。
通式:N=an×8n+an-1×8n-1…+a0×80。
例如:(200)8=2×82+0×81+0×80=(128)10。
(3)十六進制
數(shù)碼:十六進制用來表示數(shù)的數(shù)碼有16個:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
基數(shù):十六進制的基數(shù)是16。
權(quán)值:第i項數(shù)碼ai的權(quán)值是16i。
通式:N=an×16n+an-1×16n-1…+a0×160。
例如:(80)16=8×161+0×160=(128)10。
(4)二進制
數(shù)碼:二進制用來表示數(shù)的數(shù)碼有2個:0、1。
基數(shù):二進制的基數(shù)是2。
權(quán)值:第i項數(shù)碼ai的權(quán)值是2i。
通式:N=an×2n+an-1×2n-1…+a0×20。
例如:(10000000)2=1×27+0=(128)10。
由此可得,二進制、八進制、十六進制按通式展開即可轉(zhuǎn)換成十進制。
2.十進制轉(zhuǎn)換成二進制、八進制、十六進制
十進制轉(zhuǎn)換成二進制(或八進制、十六進制)采用的方法是2(或8、16)除取余法。即用十進制數(shù)(這里指整數(shù))除以基數(shù)2(或8、16),若商不為0,則繼續(xù)用商除以基數(shù)2(或8、16),直到商為0,最后將余數(shù)自下而上排列出來。
例如:將(128)10轉(zhuǎn)換成二進制數(shù)是(10000000)2。
方法如下:

所以,(128)10=(10000000)2。
例如:將(128)10轉(zhuǎn)換成八進制數(shù)是(200)8。方法如下:

例如:將(128)10轉(zhuǎn)換成十六進制數(shù)是(80)16。方法如下:

3.二進制、八進制、十六進制之間轉(zhuǎn)換
二進制、八進制、十六進制之間轉(zhuǎn)換可以先將某進制數(shù)轉(zhuǎn)換為十進制數(shù),然后將得到的十進制數(shù)轉(zhuǎn)換為另一進制數(shù),但是這種轉(zhuǎn)換方法很復(fù)雜。其實二進制、八進制、十六進制之間的轉(zhuǎn)換可以通過建立二進制與八進制、二進制與十六進制數(shù)碼之間的對應(yīng)關(guān)系來解決。由于二進制只有0和1兩個數(shù)碼,它是用若干個0和1數(shù)碼組合來表示數(shù)值的,數(shù)碼組合的總數(shù)與組合中的數(shù)碼個數(shù)有關(guān),數(shù)碼組合的總數(shù)等于2n(n是組合中的數(shù)碼個數(shù)),即:組合中的數(shù)碼個數(shù)是1(2,3,4,…,7,…)時,數(shù)碼組合的總數(shù)等于2(4,8,16,…,128,…)。根據(jù)這個規(guī)律,表示八進制(或十六進制)的8(或16)個數(shù)碼,只需要用二進制數(shù)碼3(或4)個,由此建立如下兩個關(guān)系對應(yīng)表(見表1-1和表1-2),根據(jù)關(guān)系對應(yīng)表,就可以完成二、八、十六進制數(shù)之間的轉(zhuǎn)換。
表1-1 二進制數(shù)與八進制數(shù)對應(yīng)表

(1)二進制數(shù)和八進制數(shù)之間的轉(zhuǎn)換
由二進制數(shù)轉(zhuǎn)換為八進制數(shù),采用“三位一并法”,就是以小數(shù)點為基點,向左右兩個方向?qū)⒚咳欢M制數(shù)并為一組,不足三位的用0補齊,然后按表1-1以八進制數(shù)表示。
例如:將(10110100.10111)2轉(zhuǎn)換成八進制數(shù)。
首先按“三位一并法”對10110100.10111進行分組,然后按表1-1找出與之對應(yīng)的八進制數(shù)。
010 110 100 . 101 110
2 6 4 . 5 6
得到轉(zhuǎn)換結(jié)果為(10110100.10111)2=(264.56)8,反之,由八進制數(shù)轉(zhuǎn)換為二進制數(shù)為上述過程的逆過程,采用“一分為三法”。(轉(zhuǎn)換舉例略)
(2)二進制數(shù)和十六進制數(shù)之間的轉(zhuǎn)換
由二進制數(shù)轉(zhuǎn)換為十六進制數(shù),采用“四位一并法”,就是以小數(shù)點為基點,向左向右兩個方向?qū)⒚克奈欢M制數(shù)并為一組,不足四位的用0補齊,然后按表1-2關(guān)系以十六進制數(shù)表示。
例如:將(10110100.10111)2轉(zhuǎn)換成十六進制數(shù)。
首先按“四位一并法”對10110100.10111進行分組,然后按表1-2找出與之對應(yīng)的十六進制數(shù)。
1011 0100 . 1011 1000
B 4 . B 8
得到轉(zhuǎn)換結(jié)果為:(10110100.10111)2=(B4.B8)16,反之,由十六進制數(shù)轉(zhuǎn)換為二進制數(shù)為上述過程的逆過程,采用“一分為四法”。(轉(zhuǎn)換舉例略)
表1-2 二進制數(shù)與十六進制數(shù)對應(yīng)表

4.字符的編碼
字符的編碼就是指按照特定編碼規(guī)則建立字符與二進制編碼一一對應(yīng)的關(guān)系,也就是說在特定編碼規(guī)則下,用一個二進制編碼表示一個字符,一般地,字符與二進制編碼并沒有直接的關(guān)系,字符對應(yīng)哪一個二進制編碼完全可以人為規(guī)定,為了便于信息交換,人們建立了字符的統(tǒng)一編碼標準,目前英文字符是以ASCII碼為標準編碼,漢字采用GB 2312為標準編碼。
ASCII碼是計算機系統(tǒng)中廣泛使用的一種字符編碼,是英文American Standard Code for Information Interchange(美國信息交換標準編碼)的縮寫。該編碼已經(jīng)被國際標準化組織采納,成為國際間通用的信息交換標準編碼。目前國際上流行的是ASCII編碼的七位版本,即用一個字節(jié)(8個二進制數(shù)碼為一個字節(jié))的低七位表示一個字符,ASCII碼的編碼規(guī)則是將需要編碼的字符:0~9共10個數(shù)碼,52個英文字母(區(qū)分大小寫),32個通用符號,34個控制符號,一共有27=128個,按空格、數(shù)字、大寫字母、小寫字母的先后順序排成一個16×8的矩陣,如表1-3所示。
其中,列號為0,1,2,3,4,5,6,7(對應(yīng)表1-1的二進制數(shù)為000,001,010,011,100,101,110,111),行號為0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)(對應(yīng)表1-2的二進制數(shù)為0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111),表中字符對應(yīng)的列號為高三位,行號為低四位,連起來共七位二進制數(shù)作為該字符的ASCII碼,最高位則(設(shè)為0)作為檢驗位,用于傳輸過程檢驗其正確性。
表1-3 ASCII碼表

5.漢字編碼
計算機在處理漢字時要經(jīng)過輸入、內(nèi)部處理及輸出3個環(huán)節(jié),各個環(huán)節(jié)采用的是不同的編碼,漢字在這一過程中的代碼轉(zhuǎn)換如圖1-2所示。

圖1-2 漢字代碼轉(zhuǎn)換
(1)輸入碼
輸入碼又稱外碼,是指利用鍵盤的鍵名組合給漢字編碼,輸入碼便于利用鍵盤輸入漢字。
(2)國標碼
我國于1981年5月頒布的《信息交換用漢字編碼字符集基本集》(GB 2312—1980)是漢字編碼的國家標準,稱為國標碼。一個漢字的國標碼用2字節(jié)表示,第一字節(jié)表示漢字所在的行,第二字節(jié)表示漢字所在的列,可對128×128=16384個漢字編碼,但為了與標準ASCII碼兼容,每個字節(jié)中都不能再用32個控制功能碼和碼值為32的空格以及碼值為127的操作碼,所以每個字節(jié)只能有94個編碼,也就是只可對94×94=8836個漢字編碼。
GB 2312—1980代碼表共收錄了6763個常用漢字,根據(jù)這些漢字使用頻率的高低,又將它們分成兩部分,一部分稱為一級漢字共3755個,即最常用的漢字,在代碼表中按漢語拼音字母順序排列,同音則按筆畫順序排列;另一部分稱為二級漢字共3008個,為次常用的漢字,在代碼表中按部首和筆畫順序排列,另外還收錄了一些數(shù)字符號、圖形符號、外文字母等總計7445個字符,將這7445個字符按94行×94列排列在一起,組成GB 2312—1980字符集編碼表(表1-4給出了GB 2312—1980局部代碼表),行與列分別用七位二進制碼表示,其值都從0100001到1111110(即每個字節(jié)的編碼取值范圍為十進制數(shù)33~126,0~32用于32個控制功能和碼值為32的空格編碼),其范圍對應(yīng)十六進制為21~7E。
表中的每一個漢字都對應(yīng)于唯一的行號(稱為區(qū)號)和列號(稱為位號),將區(qū)號位號相連就組成該漢字的區(qū)位碼,將區(qū)位碼的區(qū)號和位號分別由十進制轉(zhuǎn)換成對應(yīng)的十六進制數(shù),然后加上十六進制數(shù)2020H(H表示2020為十六進制數(shù)碼),就得到對應(yīng)的國標碼。例如“啊”字的區(qū)位碼是1601,分別將區(qū)號和位號轉(zhuǎn)換成對應(yīng)的十六進制數(shù)得1001H,再加上2020H就得到“啊”字的國標碼為3021H。國標碼每個字節(jié)的最高位為“0”,一般由十六制數(shù)表示。
表1-4 GB 2312—1980代碼表(局部)

(3)機內(nèi)碼
機內(nèi)碼是計算機內(nèi)表示漢字的基本編碼,計算機對漢字進行識別、存儲、處理和傳輸所用的是機內(nèi)碼,機內(nèi)碼也是雙字節(jié)編碼,將國標碼兩個字節(jié)的最高位都置為1,也就是將十六進制的國標碼加上8080H(8080H對應(yīng)的是1000000010000000),即可轉(zhuǎn)換成漢字的機內(nèi)碼,如“大”字的區(qū)位碼為2083,國標碼為3473H,機內(nèi)碼為3473H+8080H=B4F3H。將B4F3H化為二進制數(shù)得:1011010011110011,這就是在計算機中實際使用的機內(nèi)碼的二進制形式。計算機信息處理系統(tǒng)就是根據(jù)字符編碼的最高位是1還是0來區(qū)分漢字字符和ASCII碼字符。
(4)字形碼
字形碼是表示漢字字形信息(漢字的結(jié)構(gòu)、形狀、筆畫等)的編碼,用來實現(xiàn)計算機對漢字的輸出(顯示或打印)。由于漢字是方塊字,因此字形碼最常用的表示方式是點陣形式,有16×16點陣、24×24點陣、48×48點陣等。16×16點陣的含義為:用256(16×16=256)個點來表示一個漢字的字形信息。每個點有“亮”或“滅”兩種狀態(tài),用一個二進制數(shù)碼1或0來表示。因此,存儲一個16×16點陣的漢字需要256個二進制位,共32字節(jié)。
- OpenDaylight Cookbook
- Building a RESTful Web Service with Spring
- CentOS 7 Linux Server Cookbook(Second Edition)
- Getting Started with PowerShell
- Learning Concurrency in Kotlin
- Learning YARN
- Geospatial Development By Example with Python
- 從Excel到Python數(shù)據(jù)分析:Pandas、xlwings、openpyxl、Matplotlib的交互與應(yīng)用
- Android Sensor Programming By Example
- 從“1”開始3D編程
- INSTANT LESS CSS Preprocessor How-to
- Software Architecture with Python
- Python深度學(xué)習(xí):基于PyTorch
- The Python Apprentice
- jQuery權(quán)威指南