天天看點

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

點選檢視第一章 點選檢視第三章

第2章

計 算 基 礎

學習目标

  • 了解數制的概念。
  • 掌握常用的數制轉換方法。
  • 熟悉資訊在計算機内的表示和存儲方法。

計算思維的根本歸結為對各種類型的資料進行計算或處理。要想用計算機來處理現實世界的資訊,就需要用一定的方式将資訊轉換為計算機可以存儲和處理的資料。計算機用資料來表示資訊,通過處理資料來實作對資訊的處理。在計算機内部,所有形式的資訊都需要轉換為資料,以二進制形式來表示。本章将介紹數制的概念、資訊在計算機中的表示,包括數值型資訊和非數值型資訊的表示。

2.1 數制

現實世界中的資訊是有意義的,是各種事物的變化和特征的反映,又是事物之間互相作用和聯系的表征。要想用計算機來處理現實世界的資訊,就需要用一定的方式将資訊轉換為計算機可以存儲和處理的資料。計算機用資料來表示資訊,通過處理資料來實作對資訊的處理。在計算機内部,所有的資訊(程式、文字、圖檔、聲音、視訊等)都需要轉換為資料的形式,并以二進制資料表示。二進制是數制的一種,計算機領域常用的數制還有八進制、十進制、十六進制。本節将通過介紹數制的概念,引入幾種常用數制的表示方法。

2.1.1 數制的概念

數制是用一組固定的數字和一套統一的規則來表示數值的方法。按照進位方式記數的數制叫進位記數制。

在采用進位記數制的數字系統中,如果用R個基本符号(例如0,1,2,…,R-1)表示數值,則稱其為R進制,R稱為該數制的基。R進制數中可用的數字元号稱為數位,R進制共有R個數位。數位在一個數中所在的位置稱為數位。一個數的每個位置上所代表的數值大小稱為位權,位權的大小是以基數為底、以數位所在位置(即數位)的序号為指數的整數次幂。整數部分最低位的位權是R0,次低位的位權為R1;小數點後第1位的位權為R-1,第2位的位權為R-2,依次類推。

各種常用數制以及它們的特點如表2-1所示。

表2-1 常用數制及特點

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

【例2-1】十進制數1234.56可以展開為:

(1234.56)D=1×103+2×102+3×101+4×100+5×10-1+6×10-2

其中,10為該數的基,1、2、3、4、5、6為數位,103、102、101、100、10-1、10-2為位權。

【例2-2】二進制數10101.101 可以展開為:

(10101.101)B=1×24+0×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=(21.625)D

其中,2為該數的基,1、0、1、0、1、1、0、1為數位,24、23、22、21、20、2-1、2-2、2-3為位權。

【例2-3】八進制數237.4 可以展開為:

(237.4)O=2×82+3×81+7×80+4×8-1=(159.5)D

其中,8為該數的基,2、3、7、4為數位,82、81、80、8-1為位權。

【例2-4】十六進制數3FB9.D 可以展開為:

(3FB9.D)H=3×163+15×162+11×161+9×160+12×16-1=(16313.75)D

其中,16為該數的基,3、F、B、9、D為數位,163、162、161、160、16-1為位權。

德國數學家萊布尼茨(Leibniz)發明的二進制是對人類的一大貢獻。二進制是計算技術中廣泛采用的一種數制,計算機中資料的存儲和處理均采用二進制,主要原因如下。

1.電路簡單

計算機是由邏輯電路組成的,邏輯電路通常隻有兩種狀态,例如開關的接通與斷開、半導體的飽和與截止、電壓電平的高與低等,這兩種狀态正好用數位0和1來表示。

2.工作可靠

代表兩種狀态隻需要兩個數位,數位數量少,在數字傳輸和進行中不容易出錯,因而電路更加穩定可靠。

3.簡化運算

二進制數的運算法則少、運算簡單,是以計算機運算器的硬體結構大大簡化。譬如,十進制數位有10個,乘法運算法則有55種,而由兩位數位組成的二進制,其乘法隻有3種運算法則。

4.邏輯性強

由于二進制0和1正好與邏輯代數的假和真相對應,有邏輯代數的理論基礎,是以用二進制數表示二值邏輯很自然。

二進制數一般比較長,而且容易寫錯,為了便于書寫和記憶,除了二進制外,人們還經常采用八進制和十六進制表示資料。十進制、二進制、八進制和十六進制數之間的對應關系如表2-2所示。

表2-2 十進制、二進制、八進制和十六進制數之間的對應關系

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

2.1.2 數制的轉換

常用的數制轉換包括其他進制轉換為十進制,十進制轉換為其他進制,二進制、八進制、十六進制的互相轉換。

1. 非十進制轉換為十進制

将非十進制數按權展開求和,各個數位與相應位權相乘以後再相加即為對應的十進制數。

【例2-5】将二進制數10011.101、八進制數504.1、十六進制數18D.6轉換為十進制數。

解:(10011.101)B=1×24+0×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3

=16+2+1+0.5+0.125=(19.625)D           

(504.1)O=5×82+0×81+4×80+1×8-1=320+4+0.125=(324.125)D

(18D.6)H=1×162+8×161+13×160+6×16-1=256+128+13+0.375=(397.375)D

2. 十進制轉換為非十進制

将十進制轉換為其他進制時,整數部分和小數部分分别遵循不同的轉換規則。将十進制數轉換為R進制數的過程如下:

  • 整數部分:除以R取餘法,即整數部分不斷除以R取餘數,直到商為0為止,最先得到的餘數為最低位,最後得到的餘數為最高位。
  • 小數部分:乘R取整法,即小數部分不斷乘以R取整數,直到乘積為0或達到有效精度為止,最先得到的整數為最高位(最靠近小數點),最後得到的整數為最低位。

轉換規則可簡記為:以小數為基準,整數部分除以R取餘,直到商為0,所得餘數從右往左依次排列;小數部分乘R取整,直到小數為0或達到有效精度為止,所得整數從左至右依次排列。

需要注意的是,有的十進制小數不能精确轉換為相應的非十進制小數,即出現“乘不

盡”現象,此時可根據轉換精度要求保留一定的小數位數。

【例2-6】将(183.625)D分别轉換成二進制、八進制和十六進制數。

解:若十進制數既有小數部分,又有整數部分,則将它們分别轉換後再合起來。

整數(183)D轉換成其他R進制的方法,除以R取餘:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

整數部分轉換結果為(183)D=(10110111)B=(267)O=(B7)H。

小數(0.625)D轉換成R進制的方法,乘R取整:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

小數部分轉換結果為(0.625)D=(0.101)B=(0.5)O=(0.A)H。

是以,最終轉換結果為(183.625)D= (10110111.101)B=(267.5)O=(B7.A)H。

3. 八進制、十六進制轉換為二進制

由23=8和24=16可以看出,每位八進制數可用3位二進制數表示,每位十六進制數可用4位二進制數表示。是以,将八進制或十六進制轉換為二進制時,隻要将八進制數或十六進制數的每一位表示為3位或4位二進制數,去掉整數首部的0或小數尾部的0即可得到二進制數。

【例2-7】将(372.531)O和(19A76.78)H轉換為二進制數。

解:(372.531)O=(011 111 010. 101 011 001)B=(11 111 010. 101 011 001)B

(19A76.78)H=(0001 1001 1010 0111 0110. 0111 1000)B

=(1 1001 1010 0111 0110. 0111 1)B

4.二進制轉換為八進制、十六進制

同理,二進制轉換為八進制或十六進制時,需要以小數點為中心,分别向左、右每3位或4位分成一組,不足3位或4位的,整數部分在左邊補零,小數部分在右邊補零。然後,将每組數用一位對應的八進制數或十六進制數代替即可。

【例2-8】将(11011011110111.110001)B轉換為八進制數和十六進制數。

解:當由二進制數轉換成八進制數或十六進制數時,隻需要把二進制數按照3位一組或4位一組轉換成八進制數或十六進制數即可。轉換結果為:

(011 011 011 110 111.110 001)B=(33367. 61)O

(0011 0110 1111 0111.1100 0100)B = (36F7.C4 )H

2.2 資料的存儲

在計算機中利用二進制進行數組的組織和計算。

2.2.1 資料的組織形式

常用的存儲容量機關有位元組、千位元組、兆位元組等。存儲單元的位址直接用二進制進行辨別。

1. 位

計算機中所有的資料都是以二進制來表示的,一個二進制代碼稱為一位,記為bit(讀作比特)。位是計算機中最小的資訊機關,計算機中最直接、最基本的操作就是對二進制位的操作。

2. 位元組

在對二進制資料進行存儲時,以8位二進制代碼為一個單元存放在一起,稱為一個位元組(Byte),它是衡量存儲器大小的機關,記為B。

位是計算機中最小的資料機關,位元組是計算機中的基本資訊機關。

3. 字和字長

CPU能一次并行處理的一組二進制數稱為字,這組二進制數的位數就是字長。一個字由若幹個位元組組成,不同計算機系統的字長是不同的,早期的微機字長一般是8位和16位,386以及更高的處理器大多是32位,目前的計算機處理器大部分已達到64位。一次能并行處理字長為8位資料的CPU通常就叫8位CPU,一次能并行處理字長為64位資料的CPU稱為64位CPU。

4. 容量機關

計算機存儲器的容量常用B、KB、MB、GB和TB來表示,它們之間的換算關系如下:

1 B=8 bit

1 KB=1024 B=210 B K讀“千”

1 MB=1024 KB=210 KB=220 B M讀“兆”

1 GB=1024 MB=210 MB=230 B G讀“吉”

1 TB=1024 GB=210 GB=240 B T讀“太”

繼TB之後,還有PB、EB、ZB、YB等存儲容量機關。

5.位址

在計算機存儲器中,每個存儲單元必須有唯一的編号,稱之為位址。通過位址可以定位存儲單元,進行資料的查找、讀取或存入。

2.2.2 計算機中資料的運算

計算機中的資料運算主要包括算術運算和邏輯運算。參與運算的資料均由0和1構成。算術運算有加、減、乘、除4種;基本邏輯運算有與、或、非3種。

1.算術運算

(1)二進制加法

運算規則:0+0=0;0+1=1;1+0=1;1+1=0 (進位,逢二進一)。

例如:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

(2)二進制減法

運算規則:0-0=0;1-0=1;1-1=0;0-1=1(借位)。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

(3)二進制乘法

運算規則:0×0=0;1×0=0;0×1=0;1×1=1。

(4)二進制除法

二進制的除法運算規則和十進制除法類似。

2.邏輯運算

英國數學家喬治·布爾(George Boole)用數學方法研究邏輯問題,成功地建立了邏輯運算。他用等式表示判斷,把推理轉換成等式的變換。這種變換的有效性不依賴人們對符号的解釋,隻依賴于符号的組合規律。這一邏輯理論稱為布爾代數。計算機工作時要處理很多邏輯關系的運算,邏輯關系是0和1的二值關系。計算機中使用了能夠實作各種邏輯運算功能的電路,利用邏輯代數的規則進行各種邏輯判斷。邏輯運算的結果隻有“真”或“假”兩個值,通常用“1”代表“真”,用“0”代表“假”。

常用的邏輯運算符号有“與”“或”“非”“異或”等。

(1)與運算

與運算又稱邏輯乘,用符号“×”“?∧?”或AND表示。

運算規則:0×1=0;1×0=0;0×0=0;1×1=1。

設A、B為邏輯型變量,隻有當A、B同時為真時,與運算的結果才為真,否則為假。圖2-1的電路圖解釋了邏輯與運算的運算規則。假設開關A或B閉合代表邏輯值1,開關斷開代表邏輯值0,燈泡亮代表邏輯值1,不亮代表邏輯值0,則燈泡與開關A、B的關系就展現了邏輯與的關系。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-1 邏輯與的電路示意圖

邏輯與運算的真值表如表2-3所示。真值表是指把表達式中變量的各種可能取值一一列舉出來,求出對應表達式值的清單。

表2-3 邏輯與運算真值表

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

(2)或運算

或運算又稱邏輯加,用符号“+”“?∨?”或OR表示。

運算規則:0+0=0;0+1=1;1+0=1;1+1=1。

設A、B為邏輯型變量,隻要A、B之一為真時,或運算的結果就為真,否則為假。圖2-2的并聯電路展現了燈泡與開關A、B之間的關系是邏輯或的關系。邏輯或運算的真值表如表2-4所示。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-1 邏輯或的電路示意圖

表2-4 邏輯或運算真值表

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

(3)非運算

非運算又稱邏輯非,一般在變量上加橫線或在變量前加NOT表示非運算。

運算規則:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-3所示電路展現了燈泡與開關A之間是邏輯非的關系。邏輯非運算的真值表如表2-5所示。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-3 邏輯非的電路示意圖

表2-5 邏輯非運算真值表

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

(4)異或運算

除以上的與、或、非運算外,異或運算也是常見的邏輯運算,運算符為“⊕”,有時也用XOR表示。邏輯表達式為F=A⊕B,A和B相異結果為真。A與B異或的關系如表2-6所示。

表2-6 異或真值表

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

以上邏輯運算符的運算優先級依次為非、與、異或、或。

【例2-9】計算1 AND 0 OR 1 AND NOT 0的結果。

解:1 AND 0 OR 1 AND NOT 0 = 0 OR 1= True (1)

關系運算的結果是邏輯值,可以用來進行邏輯運算。

【例2-10】計算NOT (4<6) OR (2*4<9) AND 0 XOR 5>6的結果。

解:NOT (4<6) OR (2*4<9) AND 0 XOR 5>6=0 OR 1 AND 0 XOR 0 = True (1)

2.3 資料在計算機中的表示形式

2.3.1 計算機中數值型資料的表示

資訊是以資料的形式存儲和處理的。資料的類型有很多種,例如數字、文字、表格、聲音、圖形和圖像等。計算機不能直接處理這些資料類型,必須将這些資料以規定的二進制形式表示後才能加以處理,這些規定的二進制形式就是資料的編碼。編碼時需要考慮資料的特性和是否便于計算機存儲和處理。下面介紹幾種常用的資料編碼。

計算機的資料包括數值型和非數值型兩大類。數值型資料可以進行算術運算,非數值型資料不能進行算術運算。

1.數值型資料

(1)數的符号

資料有正有負,通常在計算機中規定用一個符号表示數的正負,即用“0”表示“正”,用“1”表示“負”。一般把計算機内部将正負符号數字化後得到的數稱為機器數,把計算機外部用“+”和“-”符号表示正負的數稱為真值。機器數有兩個特點:一是符号數字化,二是數的大小受機器字長的限制。

例如,假設計算機字長為8位,十進制真值-100的二進制真值形式為-1100100,機器數為11100100。-100的機器數形式如下所示:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

其中,左側的最高位“1”為數符,即符号位。

(2)定點數和浮點數

計算機處理的數值資料很多帶有小數,帶小數點的資料在計算機中通常有兩種表示方法:一種是定點表示法,簡稱定點數;另一種小數點位置可以浮動,稱為浮點表示法,簡稱浮點數。在數學上,小數點一般用“.”來表示。在計算機中,小數點的表示采用人工約定的方法來實作,即約定小數點的位置,這樣可以節省存儲空間。

  • 定點數:在定點數的表示方法中,約定所有數值資料的小數點隐含在某一個固定位置上。定點數分為定點整數和定點小數兩種。

将小數點固定在最後一位數字之後的數稱為定點整數。小數點并不真正占據一個二進制位,而是預設在最低位的右邊。定點整數分為無符号整數和有符号整數。無符号整數的數位全部都是數值位,不能表示負數。有符号整數的最高位表示符号,其他位是數值位。字長為n的有符号數可以表示的絕對值最大的負數為-2n,此時,數的最高位為1,它既表示符号位,也表示數值位。

表2-7中給出了8位、16位、32位、64位字長的計算機所能表示的無符号整數和有符号整數的範圍。

表2-7 字長不同的數的表示範圍

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

當小數點的位置固定在符号位和最高數值位之間時,稱為定點小數。定點小數表示一個純小數。

例如,若機器字長為8位,數值11110000表示的十進制數為-0.875。小數點隐含在從左側數第一個“1”(符号位)和第二個“1”(數值位的最高位)之間,可以假想為1.1110000。

  • 浮點數:用定點法所能表示的數值範圍非常有限,在做定點運算時,計算結果很容易超出字長的表示範圍,不能滿足實際問題的需要。是以當資料很大或很小時,通常用浮點數來表示。

浮點表示法與科學記數法類似,十進制的指數表示一般形式是p=m×10n,p為十進制數值,m為尾數,n為指數,10為基數。為了使浮點保持更高的精度以及有統一的表示形式,規定将浮點數寫成規格化的形式,即十進制數的尾數絕對值的範圍在 [0.1,1)之間,這樣便準确規定了小數點的位置。例如,+0.000215的科學記數法的規格化形式隻有一種,即

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

類似地,計算機中二進制數的浮點表示法主要包括尾數部分和階碼部分。這兩部分分别用定點小數和定點整數表示。尾數部分包括數符和尾數,階碼部分包括階符和階碼。浮點數的存儲形式如下:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

其中,數符和階符各占1位,階碼的位數對應數的大小範圍,尾數的位數對應數的精度。

規格化的二進制浮點數的尾數絕對值範圍是[0.1,1),對應的十進制範圍為 [1/2,1)。假定1個浮點數用2位元組來表示,設階符和數符各占1位,階碼占4位,尾數占10位。十進制數-6.75在計算機内的表示形式做如下轉換:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

在計算機内的表示形式如下:

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

浮點數的運算精度和表示範圍都遠遠大于定點數,但在運算規則上,定點數比浮點數簡單,容易實作。是以,計算機中一般都同時具有這兩種表示方法。

(3)原碼、反碼、補碼

一個二進制數同時包含符号和數值兩部分,将符号也數值化的資料稱為機器數。在計算機中機器數的表示方法很多,常用的有原碼、反碼和補碼3種形式。原碼表示法簡單易懂,但由于原碼表示的數在運算時常要進行一些判斷,進而增加了運算的複雜性,故引入了反碼和補碼。

  • 原碼表示法:原碼表示法是一種簡單的機器數表示法,即用最高位表示符号,其餘位表示數值。設x為真值,則[x]原為x的原碼。
  • 反碼表示法:正數的反碼與原碼相同;負數的反碼隻需在原碼的基礎上把符号位以外的各位數按位“求反”(0變1,1變0)即可。用[x]反表示x的反碼。
  • 補碼表示法:正數的補碼與原碼相同;負數的補碼是在原碼的基礎上符号位不變,數值各位取反(0變1,1變0),然後最低位加1。用[x]補表示x的反碼。

從上面關于原碼、反碼、補碼的定義可知:一個正數的原碼、反碼、補碼的表示形式相同,符号位為0,數值位是真值本身;一個負數的原碼、反碼、補碼的符号位都為1,數值位原碼是真值本身,反碼是各位取反,補碼是各位取反後最低位再加1。真值正0和負0的原碼和反碼表示不唯一,而補碼表示是唯一的。

【例2-11】已知x1=+1100110,x2=-1100111,求x1和x2的原碼、反碼和補碼。

解:根據原碼和反碼、補碼的轉換規則,可知正數的原碼和反碼、補碼一緻。即

[x1]原=[x1]反=[x1]補=01100110

根據負數的轉換規則,[x2]原=11100111,[x2]反=10011000,[x2]補=10011001。

除原碼、反碼和補碼外,還可以用移碼表示機器數。無論正負數,直接對其補碼的符号位取反,即可得到數的移碼。浮點數的階碼通常用移碼表示。移碼可用于簡化浮點數的乘除法運算。利用移碼便于判斷浮點數階碼的大小。

2.十進制數的編碼—BCD碼

人們習慣用十進制來記數,而計算機中采用的是二進制數。用4位二進制數來表示1位十進制數中的0~9這10個數位的編碼稱為BCD碼。BCD碼使二進制和十進制之間的轉換可以快捷地進行。相對于一般的浮點記數法,采用BCD碼,既可儲存數值的精确度,又可避免計算機做浮點運算所耗費的時間。此外,對于其他需要高精确度的計算,也經常使用BCD編碼。常見的BCD碼有8421碼、5421碼和2421碼等。在8421碼中,每4位二進制數為一組,組内每個位置上的位權從左至右分别為8、4、2、1。以十進制數0~15為例,它們的8421 BCD編碼對應關系如表2-8所示。

表2-8 十進制數與BCD碼的關系

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

2.3.2 計算機中西文字元的表示

在使用計算機進行資訊處理時,西文字元型資料是非常普遍的。西文字元包括各種字母、數字與符号等,它們在計算機中也需要用二進制進行統一編碼。ASCII碼(American Standard Code for Information Interchange,美國标準資訊交換碼)是一種常用的西文字元标準碼,被國際标準化組織(ISO)定為國際标準。

ASCII碼有7位ASCII碼和8位ASCII碼兩種。7位ASCII碼稱為基本ASCII碼,是國際通用的ASCII碼。用1個位元組表示7位ASCII碼時,最高位為0,故7位二進制數可表示128個字元,它的範圍為00000000B~01111111B。其中,包括52個英文字母(大、小寫各26個)、0~9這10個數字及一些常用符号,如表2-9所示。

表2-9 ASCII碼表

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎
帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

8位ASCII碼稱為擴充ASCII碼,是8位二進制字元編碼,其最高位有些為0,有些為1,範圍為00000000B~11111111B,是以可以表示256種不同的字元。其中,00000000B~01111111B為基本部分,對應十進制數的範圍為0~127,共計128種;10000000B~11111111B為擴充部分,範圍為128~255,也有128種。盡管美國國家标準資訊學會對擴充部分的ASCII碼已給出定義,但在實際應用中多數國家都将ASCII碼擴充部分規定為自己國家語言的字元代碼,如中國把擴充ASCII碼作為漢字的機内碼。

關于ASCII碼有以下幾點說明:

1)通常一個ASCII字元占用1個位元組(8 bit),最高位為“0”。

2)标準的7位ASCII碼字元分為兩類:一類是可顯示的列印字元,共有95個;另一類是控制字元或通信專用字元,包括0~31及127,共33個。

3)數字字元0~9的ASCII碼是連續的,為30H~39H;ASCII碼字元是區分大小寫的,大寫字母A~Z和小寫字母a~z的ASCII碼也是連續的,分别為41H~5AH和61H~7AH。例如,大寫字母A的ASCII碼為1000001B,即ASC(A)=65;小寫字母a的ASCII碼為1100001B,即ASC(a)=97。可推得ASC(C)=67,ASC(c)=99。

2.3.3 計算機中中文字元的表示

西文字母數量少,在計算機的鍵盤上都有對應的輸入按鍵。計算機内部存儲和處理西文字母一般采用ASCII碼就可以完成。漢字數量龐大,而且漢字字形、字型複雜多變,使用計算機對漢字進行處理就要複雜得多。漢字的輸入要采用輸入碼;在計算機中存放和處理要使用機内碼;輸出時需要用對應的字形碼進行顯示和列印。即在漢字處理過程中需要經過多種編碼的轉換,下面分别介紹與漢字相關的編碼。

(1)漢字輸入碼

按标準鍵盤上按鍵的不同排列組合對漢字進行編碼,稱為漢字的輸入碼。漢字輸入碼也稱外碼,是為将漢字輸入計算機設計的代碼。漢字是一種拼音、象形和會意文字,本身具有十分豐富的音、形、義等内涵。迄今為止,已有好幾百種漢字輸入碼的編碼方案問世,其中已經得到廣泛使用的也達幾十種之多。選擇不同的輸入碼方案,則輸入的方法及按鍵次數、輸入速度均有所不同。按照漢字輸入的編碼元素取材的不同,可将衆多的漢字輸入碼分為如下4類:

區位碼:我國國家标準局頒布的《資訊交換用漢字編碼字元集——基本集》(GB2312—1980)對6763個漢字和682個圖形字元進行了編碼,給出了幾種漢字編碼标準。其中區位碼将漢字和圖形符号排列在一個94行94列的二維代碼表中,每個漢字用兩個位元組表示,前(高)位元組的編碼稱為區碼,後(低)位元組的編碼稱為位碼。使用區位碼進行輸入時,需要敲入漢字的區位和位号,如“大”字在二維代碼表中處于20區第83位,區位碼即為2083。區位碼的漢字編碼無重碼,向内部碼轉換友善。但若想記住全部區位碼相當困難,是以區位碼常用于錄入特殊符号,如制表符、希臘字母等,或者輸入發音、字形不規則的漢字、生僻字。

  • 音碼:音碼是根據漢字的發音來确定漢字的編碼方法,其特點是簡單易學,但重碼太多,輸入速度較慢。常用的音碼輸入法有全拼輸入法和雙拼輸入法。
  • 形碼:形碼是根據漢字的字形結構來确定漢字的編碼方法,其特點是重碼較少,輸入速度較快,但記憶量較大,熟練掌握較困難,記憶量較大。著名的形碼輸入法是五筆字型輸入法,它是我國的王永明教授在1983年發明的。五筆是目前中國以及一些東南亞國家,如新加坡、馬來西亞等最常用的漢字輸入法之一。20世紀末,随着音碼輸入法的流行,使用五筆的人數急劇下降。
  • 音形碼:音形碼是既根據漢字的發音又根據漢字的字形來确定漢字的編碼方法,其特點是編碼規則簡單,重碼少,缺點是難記憶。例如,自然碼輸入法就是一種音形結合的漢字輸入方法。

(2)國标碼

國家标準GB 2312—1980中的漢字代碼除了十進制形式的區位碼外,還有一種十六進制形式的編碼,稱為國标碼。國标碼是在不同漢字資訊系統間進行漢字交換時所使用的編碼。國标碼并不等于區位碼,它是由區位碼轉換得到的。将區位碼轉換成國标碼的方法是:先将十進制區碼和位碼轉換為十六進制的區碼和位碼,再将這個代碼的高、低兩個位元組分别加上20H(十進制的32),就得到國标碼。例如,“大”的區位碼為2083,2083的二進制為0001010001010011B,十六進制形式為1453H。将1453的兩個位元組分别加上20H後,得到的3473H,即為“大”的國标碼。

(3)機内碼

雖然國标碼是漢字資訊交換的标準編碼,但因其前後位元組的最高位為0,與ASCII碼發生沖突,會出現二義性,是以計算機内部不能使用國标碼。将國标碼進行轉換,得到機内碼。機内碼是供計算機系統内部進行存儲、加工處理、傳輸統一使用的代碼。國标碼轉換為機内碼的方法是:将國标碼兩個位元組的最高位由0改1,其餘7位不變,即國标碼的每個位元組都加上80H(128)。

如“大”字的國标碼為3473H,其機内碼為B4F3H。在Office辦公軟體中選擇“插入”|“符号”指令,打開“符号”對話框,找到“大”字,可以看到“大”字的機内碼對應的十六進制字元代碼為B4F3H,如圖2-4所示。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-4 “大”字的機内碼

機内碼表示簡單,解決了中西文機内碼存在二義性的問題。除機内碼外,還有如GBK、UCS、BIG5、Unicode等多種編碼方案。其中,Unicode碼又稱萬國碼或統一碼,也是一個國際編碼标準,它為每種語言中的每個字元設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。Unicode碼在目前的網絡、Windows系統和許多大型軟體中得到了廣泛的應用。

(4)漢字的字形碼

漢字字形碼是漢字字庫中存儲的漢字字形的數字化資訊,用于漢字的顯示和列印。常用的輸出裝置是顯示器與列印機。漢字字形碼通常用點陣、矢量函數等方式表示。常用的字形點陣有16×16點陣、24×24點陣、48×48點陣、96×96點陣、128×128點陣、256×256點陣。不同的字型有不同的字庫,如黑體、仿宋體、楷體等。點陣的點數越多,字的表達品質也越高、越美觀,但占用的存儲空間也就越大。以“大”的16×16點陣為例(見圖2-5a),每個點位用一位二進制表示,1表示有點,0表示沒有點,則每行需用16個點,即2位元組,共16行,則占用32位元組。是以,所有漢字的字模點陣構成“字庫”。字庫中存儲了每個漢字的點陣代碼,當顯示輸出時才檢索字庫,根據字模點陣輸出字形。

(5)漢字處理流程

通過輸入裝置将漢字外碼送入計算機,再由漢字系統将其轉換成内碼存儲、傳送和處理,當需要輸出時,再由漢字系統調用字庫中漢字的字形碼得到結果,整個過程如圖2-5b所示。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-5 “大”字點陣和漢字處理流程

2.3.4 聲、圖資訊的表示

除數值、字元外,計算機還需要處理聲音、圖形、視訊等資訊,這些資訊也需要轉換成二進制數後計算機才能存儲和處理。

1.聲音的表示

聲音資訊包括話語、音樂以及自然界發出的各種聲音。聲音通常用模拟波的方式表示,振幅反映聲音的音量,頻率反映聲音的音調。音頻是連續變化的模拟信号,而計算機隻能處理數字信号,要使計算機能處理音頻信号,必須把模拟音頻信号轉換成用“0”“1”表示的數字信号,這就是音頻的數字化。聲音資訊的數字化需要經過采樣、量化、編碼等過程。

(1)采樣

對聲音的采樣,就是每隔一定時間間隔(稱為采樣周期)在模拟聲音波形上取一個幅度值(電壓值),采樣的對象是通過話筒等裝置轉換後得到的模拟電信号。采樣頻率越高,用采樣資料表示的聲音就越接近于原始波形,數字化音頻的品質也就越高。根據奈奎斯特采樣定理,在采集模拟信号時,選用該信号所含最高頻率兩倍的頻率采樣,才可基本保證原信号的品質。人耳所能聽到的頻率範圍為20 Hz~20 kHz,在實際采樣中,采用44.1 kHz作為高品質聲音的采樣頻率。

(2)量化

把采樣得到的模拟電壓值用所屬區域對應的數字來表示,就稱為對聲音的量化。用來量化樣本值的二進制位數稱為量化位數。量化位數越多,所得到的量化值就越接近于原始波形的采樣值。常見的量化位數有8位、16位、24位等。

(3)編碼

編碼是把量化後的資料用二進制資料形式表示。用一組0和1數字表示的聲音,稱為數字音頻。編碼之後得到的數字音頻資料是以檔案的形式儲存在計算機中的。圖2-6是聲音采樣、量化、編碼過程示意圖。圖中以tA、tB和tC時刻采樣的3個點A、B、C為例,給出其編碼形式和對應幅值。該例采用3位量化位數。

帶你讀《計算思維導論》之二:計算基礎計 算 基 礎

圖2-6 聲音信号的編碼

決定數字音頻品質的主要因素是采樣頻率、量化位數和聲道數。采樣頻率越高,數字音頻的品質越好;量化位數越多,數字音頻的品質越好;雙聲道(立體聲)的聲音品質要好于單聲道。相應地,資訊的存儲量也随之增加。

記錄每秒存儲聲音容量的公式為:

采樣頻率×采樣精度(位數)×聲道數÷8 =位元組數

例如,用44.10 kHz的采樣頻率,每個采樣點用16位的精度存儲,錄制10 s的立體聲節目,則其WAV格式檔案所需的存儲量為:

44 100×16×2×10÷8=1 764 000(B)≈ 1.68 MB

在聲音品質要求不高時,降低采樣頻率、采樣精度的位數或利用單聲道來錄制聲音,可減小聲音檔案的容量。

2.圖像的表示

矢量圖形檔案存儲的是生成圖形的指令,是以不必對圖形中的每個點進行數字化處理。

現實中的圖像是一種模拟信号。圖像的數字化涉及對圖像的采樣、量化和編碼等。

對圖像的采樣,就是把時間上和空間上連續的圖像轉換成離散點的過程。圖像采樣的實質是用若幹個像素點來描述一幅圖像。在一定的面積上采樣的點數(像素數)稱為圖像的“分辨率”,用點的“行數×列數”表示。分辨率越高,圖像品質越好,容量也越大。

對圖像的量化,是在圖像離散化後将表示圖像色彩濃淡的連續變化值離散成整數值的過程。在多媒體計算機系統中,圖像的顔色用若幹位二進制數表示,稱為圖像的顔色深度或亮度。常用的二進制位數有8位、16位、24位、32位。

在計算機中,常用以下類型的圖像檔案。

  • 黑白圖:圖像的顔色深度為1位,即用一個二進制位1和0表示純白、純黑兩種情況。
  • 灰階圖:圖像的顔色深度為8位,占一個位元組,灰階級别為256級。通過調整黑白兩色的程度(稱顔色灰階)可以有效地顯示單色圖像。
  • RGB 24位真彩色:彩色圖像顯示時,由紅、綠、藍三基色通過不同的強度混合而成,當強度分成256級(值為0~255)時,占24位,就構成了224=16 777 216種顔色的“真彩色”圖像。

無論從采樣還是量化來講,形成的數字化圖像必然會丢掉一些資料,與模拟圖像有一定的差距。但這個差距可以控制得非常小,以至人的肉眼難以分辨,此時,人們可以将數字化圖像等同于模拟圖像。

圖像的分辨率和像素點的顔色深度決定了圖像檔案的大小,計算公式為:

行數×列數×顔色深度÷8 =位元組數

例如,當要表示一個分辨率為640×480像素的24位真彩色圖像時,需要的存儲空間為640×480×24÷8B≈1MB。

由此可見,數字化後的圖像資料量十分巨大,必須采用編碼技術來壓縮資訊。編碼是圖像傳輸與存儲的關鍵。

資料壓縮通過編碼的技術來降低資料存儲時所需的空間,當需要使用壓縮檔案時,再進行解壓縮。根據壓縮後的資料解壓縮後是否能準确恢複到壓縮前的資料進行分類,可将資料壓縮技術分為無損壓縮和有損壓縮兩類。

無損壓縮由于能確定解壓後的資料不失真,一般用于文本資料、程式以及重要圖檔和圖像的壓縮。無損壓縮比一般為2∶1~5∶1,是以不适合實時處理圖像、視訊和音頻資料。典型的無損壓縮軟體有WinZip、WinRAR等。

有損壓縮方法是以犧牲某些資訊(這部分資訊基本不影響對原始資料的了解)為代價,換取了較高的壓縮比。有損壓縮具有不可恢複性,也就是還原後的資料與原始資料存在差異,一般用于圖像、視訊和音頻資料的壓縮,壓縮比高達幾十到幾百倍。例如,在位圖圖像存儲形式的資料中,像素與像素之間無論是列方向還是行方向都具有很大的相關性,是以資料的備援度很大,這就允許在人的視覺、聽覺允許的誤差範圍内對圖像進行大量的壓縮。20世紀80年代,國際标準化組織(ISO)和國際電信聯盟(ITU)聯合成立了兩個專家組—聯合圖像專家組(Joint Photographic Experts Group,JPEG)和運動圖像專家組(Moving Picture Experts Group,MPEG),分别制定了靜态和動态圖像壓縮的工業标準。目前主要有JPEG和MPEG兩種類型的标準。

習題

一、簡答題

  1. 簡述計算機内部利用二進制編碼的優點。
  2. 什麼是ASCII碼?
  3. 試從ASCII碼表中查出字元*、!、E、5的ASCII碼。
  4. 浮點數在計算機中是如何表示的?
  5. 如漢字“中”的區位碼是5448,它的國标碼和機内碼是什麼,是如何轉換的?
  6. 簡述将聲音存入計算機的過程。

二、填空題

  1. 計算機在處理資料時,一次存取、加工和傳送的資料長度是指    。
  2. 在計算機中,表示資訊資料的最小機關是    。
  3. 是指用一組固定的數字和一套統一的規則來表示數目的方法。
  4. 國際通用的ASCII碼是7位編碼,而計算機内部一個ASCII碼字元用1位元組來存儲,其最高位為    ,其低7位為ASCII碼值。
  5. 在微型機漢字系統中,一個漢字的機内碼占的位元組數為    。
  6. 将二進制轉換為八進制或十六進制時,    位二進制數對應一個八進制數,   位二進制數對應一個十六進制數。
  7. 在國标碼(GB 2312—1980)中總共規定了    個漢字的編碼。
  8. 漢字“華”的機内碼是BBAAH,那麼它的國标碼是    。
  9. 在計算機中表示數值時,小數點位置固定的數稱為    。
  10. 二進制數01000111代表ASCII碼字元集中的    字元。
  11. 機器數有    、    和    3種類型。
  12. (10001000)B=(    )D=(    )H。
  13. (0.110101)B=(    )O=(    )H。
  14. (27.2)O=(    )D=(    )B。
  15. (19.8)H=(    )B=(    )D。
  16. (1012)D=(    )B=(    )O。
  17. (10110010.1011)B=(    )O=(    )H。
  18. ( 35.4)O=(    )B=(    )D=(    )H=(    )8421。
  19. (39.75 )D=(    )B=(    )O=(    )H。
  20. ( 5E.C)H=(    )B=(    )O=(    )D=(    )8421。
  21. ( 0111 1000)8421 =(    )B=(    )O=(    )D=(    )H。
  22. 二進制數-10110的原碼為    ,反碼為    ,補碼為    。