官术网_书友最值得收藏!

【項目1.2】 計算機中的信息表示

1.2.1 進位計數制

數制也稱計數制,是一種用一組固定的數字和統一的規則來表示數值的方法。

按照進位方式計數的數制叫進位計數制。十進制即逢十進一,生活中也常常遇到其他進制,如六十進制(每分鐘60秒、每小時60分鐘,即逢60進1)、十二進制、十六進制等。

任何進制都有它生存的原因。人類的屈指計數沿襲至今,由于日常生活中大都采用十進制計數,因此我們對十進制最習慣;另外,如十二進制,十二的可分解的因子多(12,6,4,3,2,1),如商業中會用到的包裝計量單位“一打”;還有十六進制,十六可被平分的次數較多(16,8,4,2,1),即使在現代,某些情況下(如中藥、金器的計量單位)還在沿用這種計數方法。任何進位數制,都有以下四個要素。

基數:十進制的基數是10,二進制的基數是2,r進制(任意進制)的基數是r

數碼:十進制的數碼為0,1,2,…,9;二進制的數碼為0,1等。

進位原則:如十進制逢十進一,二進制逢二進一等。

位權:即每一位數位上數碼所具有的權,十進制數的位權為10i,二進制的位權為2i等,其中i取值為整數。

任意一個R進制數N,都可以按如下公式表示:

其中:

R為基數,表示為R進制數,逢R進1,該進位數制中允許選用R個基本數碼的個數。

n為整數部分的位數。

m為小數部分的位數。

Ri為第i位的位權。

Ki為第i位的數碼,為0、1、2、…、R-1中的一個。

1.2.2 二進制代碼和二進制數碼

1.二進制的特點

在計算機中為什么要采用二進制?原因如下。

(1)可行性

采用二進制,只有0和1兩個狀態,需要表示0、1兩種狀態的電子器件很多,如開關的接通和斷開,晶體管的導通和截止、磁元件的正負剩磁、電位電平的低與高等都可表示0、1兩個數碼。使用二進制,電子器件具有實現的可行性。

(2)簡易性

二進制數的運算法則少,運算簡單,使計算機運算器的硬件結構大大簡化。

(3)邏輯性

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

2.二進制代碼和二進制數碼

我們從二進制代碼和二進制數碼開始介紹計算機基礎知識,是因為二進制代碼和二進制數碼是計算機信息表示和信息處理的基礎。

代碼是事先約定好的信息表示的形式。二進制代碼是把0和1兩個符號按不同順序排列起來的一串符號。

二進制數碼有兩個基本特征:

用0、1兩個不同的符號組成的符號串表示數量;

相鄰兩個符號之間遵循“逢2進1”的原則,即左邊的一位所代表的數目是右邊緊鄰同一符號所代表的數目的2倍。

二進制代碼和二進制數碼是既有聯系又有區別的兩個概念:凡是用0和1兩種符號表示信息的代碼統稱為二進制代碼(或二值代碼);用0和1兩種符號表示數量并且整個符號串各位均符合“逢2進1”原則的二進制代碼,稱為二進制數碼。

目前的計算機在內部幾乎毫無例外地使用二進制代碼或二進制數碼來表示信息,是由于以二進制代碼為基礎設計、制造計算機,可以做到速度快、元件少,既經濟又可靠。雖然計算機在使用者的角度看來處理的是十進制數,但在計算機內部仍然是以二進制數碼為操作對象的,所以理解它的內部形式是必要的。

在計算機中數據的最小單位是1位二進制代碼,簡稱為位(bit)。8個連續的bit稱為一個字節(byte)。

3.數的二進制表示和二進制運算

(1)數的二進制表示

客觀世界中,事物的數量是一個客觀存在,但表示的方法可以多種多樣。

例1-1 345用十進制數碼可以表示為(345)10=3×102十4×101十5×100

用二進制數碼可以表示為(101011001)2=1×28+0×27+1×26+0×25+1×24+1×23+0×22+0×21+1×20=256+0+64+0+16+8+0+0+ 1=(345)10

二進制計數中個位上的計數單位也是1,即20=1,個位向左依次為21,22,23,…;向右依次為2?1,2?2,…。

(2)計算機中的算術運算

二進制數的算術運算與十進制的算術運算類似,但其運算規則更為簡單,其規則見表1.1。

表1.1 二進制數的運算規則

二進制數的加法運算

例1-2 二進制數1001與1011相加

算式:

結果:(1001)2+(1011)2=(10100)2

由算式可以看出,兩個二進制數相加時,每一位最多有3個數(本位被加數、加數和來自低位的進位)相加,按二進制數的加法運算法則得到本位相加的和及向高位的進位。

二進制數的減法運算

例1-3 二進制數11000001與00101101相減

算式

結果:(11000001)2– (11000001)2=(10010100)2

由算式可以看出,兩個二進制數相減時,每一位最多有3個數(本位被減數、減數和向高位的借位)相減,按二進制數的減法運算法則得到本位相減的差數和向高位的借位。

(3)計算機中的邏輯運算

計算機中的邏輯關系是一種二值邏輯,邏輯運算的結果只有“真”或“假”兩個值。二值邏輯很容易用二進制的“0”和“1”來表示,一般用“1”表示真,用“0”表示假。邏輯值的每一位表示一個邏輯值,邏輯運算是按對應位進行的,每位之間相互獨立,不存在進位和借位關系,運算結果也是邏輯值。

邏輯運算有“或”“與”和“非”三種,其他復雜的邏輯關系都可以由這三個基本邏輯關系組合而成。

邏輯“或”:用于表示邏輯“或”關系的運算,“或”運算符可用OR,+,∪或∨表示。

邏輯“或”的運算規則如下:

0+0=0     0+1=1   1+0=1    1+1=1

即兩個邏輯位進行“或”運算,只要有一個為“真”,邏輯運算的結果即為“真”,請參見表1.2。

例1-4 如果A=1001111,B=(1011101);求 A+B

步驟如下:

結果:A+B=1001111+1011101=1011111

邏輯“與”:用于表示邏輯與關系的運算,稱為“與”運算,與運算符可用AND,·,×,∩或∧表示。

邏輯“與”的運算規則如下:

0×0=0     0×1=0     1×0=0     1×1=1

即兩個邏輯位進行“與”運算,只要有一個為“假”,邏輯運算的結果即為“假”,請參見表1.3。

例1-5 如果A=1001111,B=(1011101),求A×B

步驟如下:

結果:A·B=1001111×101101=1001101

表1.2 “或”運算規則

表1.3 “與”運算規則

邏輯“非”:用于表示邏輯非關系的運算,該運算常在邏輯變量上加一橫線表示。

邏輯“非”的運算規則:=0,=1即對邏輯位求反,請參見表1.4。

表1.4 “非”運算規則

1.2.3 不同數制間的轉換

假設將十進制數轉換為R進制數:整數部分和小數部分須分別遵守不同的轉換規則。

對整數部分:除以R取余法,即整數部分不斷除以R取余數,直到商為0為止,最先得到的余數為最低位,最后得到的余數為最高位。

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

1.十進制數轉換為二進制數

十進制數轉換成二進制數,基數為2,故對整數部分,除2取余,對小數部分乘2取整。為了將一個既有整數部分又有小數部分的十進制數轉換成二進制數,可以將其整數部分和小數部分分別轉換,然后再組合。

例1-6 將十進制數(35.25)10轉換成二進制數

注意:第一次得到的余數是二進制數的最低位,最后一次得到的余數是二進制數的最高位。也可用如下方式計算。

注意

一個十進制小數不一定能完全準確地轉換成二進制小數,這時可以根據精度要求只轉換到小數點后某一位為止即可。將其整數部分和小數部分分別轉換,然后組合起來得(35.25)10=(100011.01)2

2.十進制數轉換為八進制數

八進制數的基本特征是:用8個不同符號0,1,2,3,4,5,6,7組成的符號串表示數量,相鄰兩個符號之間遵循“逢8進1”原則,也就是說各位上的位權是基數8的若干次冪。

例1-7 將十進制數(1725.32)10轉換成八進制數(轉換結果取3位小數)。

十進制數轉換數成八進制數,基數為8,故對整數部分,除8取余,對小數部分乘8取整。為了將一個既有整數部分又有小數部分的十進制數轉換成八進制數,可以將其整數部分和小數部分分別轉換,然后再組合。

得(1725.32)10=(3275.243)8

3.十進制數轉換為十六進制數

十六進制數的基本特征是:用16個不同符號0~9和A、B、C、D、E、F組成的符號串表示數量,相鄰兩個符號之間遵循“逢16進1”的原則,也就是各位上的位權是基數16的若干次冪。

用基數乘除法,此處基為16。將十進制整數轉換成十六進制整數可以采用“除16取余”法;將十進制小數轉換成十六進制小數可以采用“乘16取整”法。如果十進制數既含有整數部分又含有小數部分則應分別轉換后再組合起來。

例1-8 將十進制數(237.45)10轉換成十六進制數(取3位小數)

整數部分:

小數部分:

得(237.45)10=(ED.733)16

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

8和16都是2的整數次冪,即8=23,16=24,因此3位二進制數相當于l位八進制數,4位二進制數相當于 l 位十六進制數(見表1.5),它們之間的轉換關系也相當簡單。由于二進制數表示數值的位數較長,因此常需用八進制數、十六進制數來表示二進制數。

表1.5 二進制數、八進制數、十六進制數的對應關系表

將二進制數以小數點為中心分別向兩邊分組,轉換成八(或十六)進制數每3(或4)位為一組,整數部分向左分組,不足位數左邊加0補足。小數部分向右分組,不足部分右邊加0補足,然后將每組二進制數轉化成八(或十六)進制數即可。

例1-9 將二進制數(11101110.00101011)2轉換成八進制數、十六進制數

5.八、十六進制數轉換為二進制數

將每位八(或十六)進制數展開為3(或4)位二進制數。

例 1-10

整數前的高位零和小數后的低位零可取消。

各種進制轉換中,最為重要的是二進制與十進制之間的轉換計算,以及八進制、十六進制與二進制的直接對應轉換。

1.2.4 計算機中的數據及編碼

1.數據的形式

數據有兩種形式。一種是形態為人類可讀形式的數據,簡稱人讀數據。因為數據首先是由人類進行收集、整理、組織和使用的,這就形成了人類獨有的語言、文字以及圖像。例如圖書資料、音像制品等,都是特定的人群才能理解的數據。

另一種形式稱為機器可讀形式的數據,簡稱機讀數據。如印刷在物品上的條形碼,錄制在磁帶、磁盤、光盤上的數碼,穿在紙帶和卡片上的各種孔等,都是通過特制的輸入設備將這些信息傳輸給計算機處理,它們都屬于機器可讀數據。顯然,機器可讀數據使用了二進制數據的形式。

2.數據的單位

計算機中數據的常用單位有位、字節和字。

(1)位(Bit)

計算機采用二進制,運算器運算的是二進制數,控制器發出的各種指令也表示成二進制數,存儲器中存放的數據和程序也是二進制數,在網絡上進行數據通信時發送和接收的還是二進制數。顯然,在計算機內部到處都是由0和1組成的數據流。

計算機中最小的數據單位是二進制的一個數位,簡稱為位(bit,比特)。計算機中最直接、最基本的操作就是對二進制位的操作。

(2)字節(Byte)

字節簡寫為 B,為了表示人讀數據中的所有字符(字母、數字以及各種專用符號,大約有128~256個),需要7位或8位二進制數。因此,人們采用8位為1個字節,1個字節由8個二進制數位組成。

字節是計算機中用來表示存儲空間大小的基本容量單位。例如,計算機內存的存儲容量,磁盤的存儲容量等都是以字節為單位表示的。除用字節為單位表示存儲容量外,還可以用千字節(KB)、兆字節(MB)以及十億字節(GB)等表示存儲容量。它們之間存在下列換算關系:

1B=8bit

1KB=1024B=210B         1KB=1024字節,“K”的意思是“千”

1MB=1024KB=210KB=220B=1024×1024B 1MB=1024KB字節,“M”讀“兆”。

1GB=1024MB=210MB=230B=1024×1024KB 1GB=1024MB字節,“G”讀“吉“。

1TB=1024GB=210GB=240B=1024×1024MB 1TB=1024GB字節,“T”讀“太”。

要注意位與字節的區別:位是計算機中最小的數據單位,字節是計算機中基本的信息單位。

(3)字(word)

在計算機中作為一個整體被存取、傳送、處理的二進制數字符串叫作一個字或單元,每個字中二進制位數的長度,稱為字長。一個字由若干個字節組成,不同的計算機系統的字長是不同的,常見的有8位、16位、32位、64位等,字長越大,計算機一次處理的信息位就越多,精度就越高,字長是計算機性能的一個重要指標。目前主流計算機都是32位機。

注意字與字長的區別,字是單位,而字長是指標,指標需要用單位去衡量。正如生活中重量與公斤的關系,公斤是單位,重量是指標,重量需要用公斤加以衡量。

3.常用的數據編碼

信息包含在數據里面,數據要以規定好的二進制形式表示才能被計算機加以處理,這些規定的形式就是數據的編碼。數據的類型有很多,數字和文字是最簡單的類型,表格、聲音、圖形和圖像則是復雜的類型,編碼時要考慮數據的特性和便于計算機存儲和處理,所以也是一件非常重要的工作。下面介紹幾種常用的數據編碼。

(1)BCD碼

因為二進制數不直觀,于是在計算機的輸入和輸出時通常還是用十進制數。但是計算機只能使用二進制編碼,所以另外規定了一種用二進制編碼表示十進制數的方式,即每1位十進制數字對應4位二進制編碼,稱二進制編碼的十進制數(Binary Coded Decimal,BCD碼),又稱8421碼。表1.6是十進制數0到9與BCD碼的對應關系。

表1.6 BCD編碼表

(2)ASCII編碼

字符是計算機中最多的信息形式之一,是人與計算機進行通信、交互的重要媒介。在計算機中,要為每個字符指定一個確定的編碼,作為識別與使用這些字符的依據。

各種字母和符號也必須按規定好的二進制碼表示,計算機才能處理。在西文領域,目前普遍采用的是美國標準信息交換碼(American Standard Code for Information Interchange,ASCII碼),ASCII 碼雖然是美國國家標準,但它已被國際標準化組織(ISO)認定為國際標準,并在世界范圍內通用。

標準的ASCII碼是7位碼,用一個字節表示,最高位總是0,可以表示128個字符,如表1.7所示。前32個碼和最后一個碼通常是計算機系統專用的,代表一個不可見的控制字符。數字字符0到9的ASCII碼是連續的,從30H到39H(H表示是十六進制數);大寫字母A到Z和小寫英文字母a到z的ASCII碼也是連續的,分別從41H到54H和從61H到74H。因此在知道一個字母或數字的編碼后,很容易推算出其他字母和數字的編碼。

例如:大寫字母A,其ASCII碼為1000001,即ASC(A)=65

小寫字母a,其ASCII碼為1100001,即ASC(a)=97

擴展的ASCII碼是8位碼,也是一個字節表示,其前128個碼與標準的ASCII碼是一樣的,后128個碼(最高位為1)則有不同的標準,并且與漢字的編碼有沖突。為了查閱方便,表1.7中列出了ASCII碼字符編碼。

(3)漢字編碼

計算機處理漢字信息時,由于漢字具有特殊性,因此漢字的輸入、存儲、處理及輸出過程中所使用的漢字代碼不相同,分為用于漢字輸入的輸入碼、用于機內存儲和處理的機內碼、用于輸出顯示和打印的字模點陣碼(或稱字形碼)。

表1.7 7位ASCII 碼表

①《信息交換用漢字編碼字符集·基本集》

《信息交換用漢字編碼字符集·基本集》是我國于1980年制定的國家標準GB2312-80,代號為國標碼,是國家規定用于漢字信息處理使用的代碼的依據。

GB2312-80中規定了信息交換用的6763個漢字和682個非漢字圖形符號(包括幾種外文字母、數字和符號)的代碼。

6763個漢字又按其使用頻度、組詞能力以及用途大小分成一級常用漢字3755個,二級常用漢字3008個。

在此標準中,每個漢字(圖形符號)采用2個字節表示,每個字節只用低7位。由于低7位中有34種狀態是用于控制字符,因此,只用94(128-34=94)種狀態可用于漢字編碼。這樣,雙字節的低7位只能表示94×94=8836種狀態。

此標準的漢字編碼表有94行、94列。其行號稱為區號,列號稱為位號。雙字節中,用高字節表示區號,低字節表示位號。非漢字圖形符號置于第1~11區;一級漢字3755個,置于第16~55區;二級漢字3008個,置于第56~87區。

② 漢字的機內碼

漢字的機內碼是供計算機系統內部進行存儲、加工處理、傳輸統一使用的代碼,又稱為漢字內部碼或漢字內碼。不同系統使用的漢字機內碼有可能不同。目前使用最廣泛的一種為兩個字節的機內碼,俗稱變形的國標碼。這種格式的機內碼是將國標GB2312-80交換碼的兩個字節的最高位分別置為1而得到的。其最大優點是機內碼表示簡單,且與交換碼之間有明顯的對應關系,同時也解決了中西文機內碼存在二義性的問題。例如,“中”的國標碼為十六進制5650 (01010110 01010000),其對應的機內碼為十六進制D6D0(11010110 11010000),同樣,“國”字的國標碼為397A,其對應的機內碼為B9FA。

③ 漢字的輸入碼(外碼)

漢字輸入碼是為了利用現有的計算機鍵盤,將形態各異的漢字輸入計算機而編制的代碼。目前在我國推出的漢字輸入編碼方案很多,其表示形式大多為字母、數字或符號。編碼方案大致可以分為以漢字發音進行編碼的音碼,例如全拼碼、簡拼碼、雙拼碼等;按漢字書寫的形式進行編碼的形碼,例如五筆字型碼是;也有音形結合的編碼,例如自然碼。

④ 漢字的字形碼

漢字字形碼是漢字字庫中存儲的漢字字形的數字化信息,用于漢字的顯示和打印。目前漢字字形的產生方式大多是數字式,即以點陣方式形成漢字,因此,漢字字形碼主要是指漢字字形點陣的代碼。

漢字字形點陣有16×16點陣、24×24點陣、32×32點陣、64×64點陣、96×96點陣、128×128點陣、256×256點陣等。一個漢字方塊中行數、列數分得越多,描繪的漢字也就越細微,但占用的存儲空間也就越多。漢字字形點陣中每個點的信息要用一位二進制碼來表示。對16×16點陣的字表碼,需要用32個字節(16×16÷8=32)表示;24×24點陣的字形碼需要用72個字節(24×24÷8=72)表示。

漢字字庫是漢字字形數字化后,以二進制文件形式存儲在存儲器中而形成的漢字字模庫。漢字字模庫亦稱漢字字形庫,簡稱漢字字庫。

注意

國標碼用2個字節表示1個漢字,每個字節只用后7位。計算機處理漢字時,不能直接使用國標碼,而要將最高位設置成1,變換成漢字機內碼,其原因是為了區別漢字碼和ASCII碼,當最高位是0時,表示為ASCII碼,當最高位是1時,表示為漢字碼。

4.計算機中數的表示

(1)計算機中數據的表示

計算機只能用數字化信息來表示數的正、負,人們規定用“0”表示正號,用“1”表示負號。例如,在機器中用8位二進制表示一個數“+90”,其格式為

而用8位二進制表示一個數“?89”,其格式為

在計算機數字和符號都用二進制碼表示,兩者合在一起構成數的機內表示形式,稱為機器數,而它真正表示的數值被稱為這個機器數的真值。

(2)定點數和浮點數

① 機器數表示的數的范圍受設備限制

計算機一般用若干個二進制位表示一個數或一條指令,把它們作為一個整體來處理、存儲和傳送。這種作為一個整體來處理的二進制位串,稱為計算機字。表示數據的字稱為數據字,表示指令的字稱為指令字。

計算機是以字為單位進行處理、存儲和傳送的,所以運算器中的加法器、累加器以及其他一些寄存器,都選擇與字長相同位數。字長一定,則計算機數據字所能表示的數的范圍也就確定了。

例如,使用8位字長計算機,它可表示無符號整數的最大值是(255)10=(11111111)2。運算時,若數值超出機器數所能表示的范圍,就會停止運算和處理,這種現象稱為溢出。

② 定點數與浮點數

計算機中運算的數,有整數,也有小數,如何確定小數點的位置呢?通常有兩種約定:一種是規定小數點的位置固定不變,這時機器數稱為定點數;另一種是小數點的位置可以浮動的,這時的機器數稱為浮點數。微型機多選用定點數。

數的定點表示是指數據字中小數點的位置是固定不變的。小數點位置可以固定在符號位之后,這時,數據字就表示一個純小數。假定機器字長為16位,符號位占1位,數值部分占15位,故下面機器數等效的十進制數為?2?15

如果把小數點位置固定在數據字的最后,這時,數據字就表示一個純整數。假設機器字長為16位,符號占一位,數值部分占15位,故下面機器數等效的十進制數為+32767。

定點表示法所能表示的數值范圍很有限,為了擴大定點數的表示范圍,可以通過編程技術,采用多個字節來表示一個定點數,例如,采用4個字節或8個字節等。

③ 浮點數

浮點表示法就是小數點在數中的位置是浮動的。在以數值計算為主要任務的計算機中,由于定點表示法所能表示的數的范圍太窄,不能滿足計算問題的需要,因此就要采用浮點表示法。在同樣字長的情況下,浮點表示法能表示的數的范圍擴大了。

計算機中的浮點表示法包括兩個部分:一部分是階碼(表示指數,記作E);另一部分是尾數(表示有效數字,記作M)。設任意一數N可以表示為N=2EM,其中2為基數,E為階碼, M為尾數。浮點數在機器中的表示方法如下:

由尾數部分隱含的小數點位置可知,尾數總是小于1的數字,它給出該浮點數的有效數字。尾數部分的符號位確定該浮點數的正負。階碼給出的總是整數,它確定小數點浮動的位數,若階符為正,則向右移動;若階符為負,則向左移動。

假設機器字長為32位,階碼8位,尾數24位,則表示如下:

其中左邊1位表示階碼的符號,符號位后的7位表示階碼的大小。后24位中,有一位表示尾數的符號,其余23位表示尾數的大小。浮點數表示法對尾數有如下規定:1/2≤M<1,即要求尾數中第1位數不為零,這樣的浮點數稱為規格化數。

當浮點數的尾數為零或者階碼為最小值時,機器通常規定,把該數看作零,稱為“機器零”在浮點數表示和運算中,當一個數的階碼大于機器所能表示的最大碼時,產生“上溢”。上溢時機器一般不再繼續運算而轉入“溢出”處理。當一個數的階碼小于機器所能代表的最小階碼時產生“下溢”,下溢時一般當作機器零來處理。

主站蜘蛛池模板: 砚山县| 云南省| 咸阳市| 喀喇沁旗| 惠水县| 汶上县| 英吉沙县| 达州市| 汝阳县| 达日县| 新密市| 多伦县| 游戏| 城市| 嵩明县| 吉隆县| 湄潭县| 建水县| 兴国县| 邳州市| 中超| 永兴县| 临泉县| 门头沟区| 九龙坡区| 达日县| 朔州市| 修水县| 阳西县| 定西市| 安康市| 延寿县| 乳山市| 新田县| 资中县| 宜都市| 郧西县| 东光县| 库车县| 罗江县| 富裕县|