小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)制和編碼知識50問

 百眼通 2014-09-29

(網(wǎng)易博客http://xalq329.blog.163.com   李謙  2008-03-16)   

    說明這是本人學習電腦的筆記。問題都是我提出來的,答案則完全來自網(wǎng)上。因為提供資料者眾多,不便一一致謝,很是抱歉。

    為什么寫成問答的形式?因為年紀大了,有些健忘,寫成問答形式,便于以后查閱。此外,為了加深記憶,對每一個問題的答案都是根據(jù)自己的理解,用自己的語言進行了改寫,甚至每一個插圖或圖表都是經(jīng)過我重新繪制的,絕不照抄照搬,有的地方甚至還有小小的“發(fā)揮”。正因為這樣,這些問題的答案肯定有不嚴密甚至錯誤的地方。本來這是我自己的學習筆記,我在網(wǎng)上看到同是“菜鳥”網(wǎng)友求知欲很強,我就斗膽地把它發(fā)布在我的博客上,以便與這些網(wǎng)友交流,當然,更歡迎“大俠”們指正。 

本博客似乎不支持把Word文檔直接粘貼上傳,所以在本問答中的圖片都是一個個插入的,很麻煩。如果有的網(wǎng)友希望能看到原文,請給我的信箱發(fā)信,我會用PDF格式把本文傳給你。

 

目    錄

一. 數(shù)制知識·…………………··············· 3

1. 什么是數(shù)制?常用的數(shù)制有哪些?············· 3

2. 什么是基數(shù)?怎樣用基數(shù)或符號區(qū)分不同數(shù)制的數(shù)?····· 3

3. 什么是位權?如何用位權展開不同數(shù)制的數(shù)?········ 4

4. 什么是二進制數(shù)?如何運算?··············· 4

5. 二進制數(shù)如何換算成其他數(shù)制的數(shù)?············ 5

6. 什么是八進制數(shù)?怎樣計算? ………………………………………6

7. 八進制數(shù)如何換算成其他數(shù)制的數(shù)?············ 6

8. 什么是十六進制數(shù)?如何運算?·············· 7

9. 十六進制數(shù)如何換算成其他數(shù)制的數(shù)?··········· 7

10. 十進制數(shù)如何換算為其他數(shù)制的數(shù)?············ 8

二. 編碼的基本知識 ············· ………………11

11. 什么是編碼?什么是字符集?·············· 11

12. 計算機常用的國際通用編碼有哪些?··········· 11

13. 什么是Unicode碼?·················· 12

14. 什么是UCS-2碼?什么是UTF-8碼?············ 12

15. UCS-2碼和UTF-8是怎樣轉換的?············ 12

16. 什么是codepage?··················· 13

17. 什么是EBCDIC碼?··················· 13

18. 什么是BCD碼?···················· 13

19. 我國已經(jīng)頒布的有關編碼標準有哪些?·········· 14

20. 什么是“位”?什么是“字節(jié)”?············ 15

21. 1個千字節(jié)KB是多少字節(jié)?··············· 15 

22. 什么是“字”?什么是字長?·············· 16

23. 什么是ASCI I碼?··················· 16

24. 如何用鍵盤輸入ASCI I字符?·············· 17

25. 請介紹ASCI I碼前32個碼的含義!············ 18

26. 什么是擴展ASCI I碼?················· 18

27. 怎樣查找出任一字符的Unicode碼?··········· 19

28. 如何把Unicode碼轉換為相應的字符?·········· 21

29. Unicode碼和ASCII碼是什么關系?··········· 21

三. 漢字編碼知識····………………·········· 22

30. 請介紹計算機對漢字信息的處理過程?·········· 22

31. 請介紹處理漢字信息的要點?·············· 22

32, 什么是漢字的輸入碼?················· 23

33. 什么是漢字的區(qū)位碼?················· 23

34. 怎樣用區(qū)位碼輸入法輸入漢字和字符?·········· 24

35. 請給出區(qū)位碼表!··················· 24

36. 什么是漢字的交換碼?················· 24

37. 什么是漢字的國標碼?················· 25

38. 什么是漢字的內(nèi)碼?·················· 25

39. 什么是漢字的處理碼?················· 25

40. 區(qū)位碼、交換碼和內(nèi)碼各有什么用途?·········· 25

41. 區(qū)位碼、交換碼和內(nèi)碼之間怎樣換算?·········· 26

42. Unicode碼和國標碼有什么關系? ············ 27

43. 漢字字符是怎樣輸出的?················ 27

44. 什么是漢字字形碼?有幾種?·············· 28

45. 什么是點陣字形碼?·················· 28

46. 什么是矢量字形碼?·················· 29

47. 什么是輪廓字形碼?·················· 29

48. 什么是漢字地址碼··················· 29

49. 什么是硬字庫?什么是軟字庫?············· 29

50. 小測驗題······················· 29

附錄:漢字的區(qū)位碼表 (已刪) ···········……… 30

 

《數(shù)制和編碼知識50問》正文

一. 數(shù)制知識

1. 什么是數(shù)制?常用的數(shù)制有哪些?  

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客 

2. 什么是基數(shù)?怎樣用基數(shù)或符號區(qū)分不同數(shù)制的數(shù)?

答:基數(shù)(Radix)是一個計數(shù)制所包含的數(shù)字符號的個數(shù)。如果用R表示基數(shù),則十進制(Decimal)的基數(shù)是10或R =10,因為十進制數(shù)可用的數(shù)字符號有:0、1、2、3、4、5、6、7、8、9,共有10個。二進制(Binary)的基數(shù)是2或R = 2,因為二進制數(shù)可用的數(shù)碼只有0和1,計兩個。同理,八進制(Octal)的基數(shù)是8;十六進制(Hexadecimal)的基數(shù)是16。

    為了區(qū)分不同數(shù)制的數(shù),約定對于任一R進制的數(shù)N,記作:(N)R。比如數(shù)字(1010)2、(703)8、(AE05)16 分別表示二進制數(shù)1010、八進制數(shù)703和十六進制數(shù)AE05。

   不加括號及下標的數(shù),默認為十進制數(shù),如256。人們也習慣在一個數(shù)的后面加上字母D(十進制)、B(二進制)、O(八進制)、H(十六進制)來表示其前面的數(shù)用的是什么進位制,如256D表示是十進制數(shù)256;1010B表示二進制數(shù)1010;AE05H表示十六進制數(shù)AE05。

當表示十六進制數(shù)時,也經(jīng)常在數(shù)碼的前面加以“&H”,例如?!?amp;H20AE”表示這個數(shù)是十六進制的20AE。在C語言和另外一些場合,也在十六進制的數(shù)碼前面加以“ox”,例如“ox4AD”表示這個數(shù)是十六進制數(shù)4AD。

在表格中或其他場合(如在BIOS中)也經(jīng)常用“D”或“Dec”來表示十進制數(shù);用“B”或“Bin”來表示二進制數(shù);用“Hx”或“Hex”表示十六進制數(shù)。

3. 什么是位權?如何用位權展開不同數(shù)制的數(shù)?

答:任何一個R進制的數(shù)都是由一串數(shù)碼表示的,其中每一位數(shù)碼所表示的實際值大小,除數(shù)字本身的數(shù)值外,還與它所處的位置有關。該位置上的基準值就稱為位權(或稱位值)。位權用基數(shù)R的i次冪表示。對于R進制數(shù),小數(shù)點前第一位的位權為R0,小數(shù)點前第二位的位權為R1,小數(shù)點后第1位的位權為R-1,小數(shù)點后第2位的位權為R-2,依此類推。

以下是幾個實例:

表2 幾種數(shù)制的的位權

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

4. 什么是二進制數(shù)?如何運算?

答:二進制數(shù)的基數(shù)為2,即“逢二進一”。它含有兩個數(shù)字符號:0、1。位權為2i。

    二進制數(shù)是計算機中采用的數(shù)制,因為計算機正是利用1和0這兩個數(shù)來表示電子元件的兩個穩(wěn)定狀態(tài)“開”和“關”的。二進制數(shù)的特點是運算規(guī)則簡單,適合邏輯運算。

    二進制的計算規(guī)則非常簡單。以加法為例,二進制加法規(guī)則僅有四條,即

       ⑴ 加法:0+0=0;1+0=1;0+1=1;1+1=10(逢二進一)。如11+101=1000。

       ⑵ 減法: 0-0=0  1-0=1  10-1=1(有借位)

       ⑶ 乘法: 0×0=0  1×0=0  0×1=0  1×1=1

       ⑷ 除法   0÷1=0  1÷1=1  0÷0=0  1÷0=0(無意義)

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

  但是,二進制的明顯缺點是數(shù)字冗長、書寫量過大,容易出錯、不便閱讀。所以,在計算機技術文獻的書寫中,常用八進制、十進制或十六進制數(shù)表示。

5. 二進制數(shù)如何換算成其他數(shù)制的數(shù)?

    答:不同數(shù)制之間的數(shù)值轉換時,用計算機自帶的計算器計算是很方便的。計算方法見第27題。以下只介紹用手工換算的方法。

    把二進制數(shù)換算成十進制數(shù)時,用位權展開的方法;換算成八進或十六進制數(shù)時,以二進制數(shù)以小數(shù)點為界,按三位(改成八進位時)或四位(改成十六進位制時)為一組分段的方法。具體方法如下:

    ⑴ 二進制數(shù)換算成十進制數(shù)時,介紹兩種方法  

 第一種方法—用按位權求和的方法。例如,當把二進制數(shù)10101110.11換算為十進制的數(shù)時,其解見下表:

表3 二進制數(shù)轉換為十進制計算表

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

    即有(10101110.11)2=174.75或10101110.11B=174.75D

  其中的下標“2”表示這是一個二進制數(shù);后面的“B”也表示二進制數(shù);“D”則表示這是十進制數(shù),通常也可以把這個“D”省略。

    小數(shù)點以后的位權見下表。

表4 小數(shù)點后的位權關系

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

    第二種方法—逐步累加法。利用“本位累計數(shù)=上位累計數(shù)×2+本位數(shù)(1或0)”的思路進行累加計算,不必考慮位權。例如,當把二進制數(shù)1101101換算成十進制數(shù)時,可以利用下述的簡單計算就可以得出結果。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

    ⑵ 二進制數(shù)換算為八進制數(shù)時,可以以小數(shù)點為界,把二進制數(shù)按三位分為一組的方法進行計算:

例如: (10101110.11)2=(010 101 110.110)2=(256.6)8

或         (10101110.11)B =(256.6)D

    這里,以小數(shù)點為界,按三個二進制數(shù)數(shù)為一組劃分時,若小數(shù)點前的高位是“10”,應該在前面加個“0”,寫為“010”;在小數(shù)點后的“11”,不足三位,應該在后面加“0”,即把“.11”改寫為“.110”。這是應該特別注意的。

    ⑶二進制數(shù)換算為十六進制數(shù)時,可以以小數(shù)點為界,把二進制數(shù)按四位分為一組的方法進行計算:

例如:(10101110.11)2=(1010 1110.1100)2=(AE.C)16

或表示為     (10101110.11)B = (AE.C)H

    這里,以小數(shù)點為界,按四個二進制數(shù)為一組劃分時,小數(shù)點前的高位不足四位時,應該在前面加“0”以補足四位;如果在小數(shù)點后的位數(shù)不足四位時,應該在數(shù)字的后面加“0”以補足四位。這是應該特別注意的。

    另外,用計算器計算時,要把小數(shù)點前后的數(shù)分別進行計算。 

6. 什么是八進制數(shù)?怎樣計算?

   答:八進位制數(shù)有0、1、2、3、4、5、6和7共8個數(shù)碼元素,基數(shù)為8,計算時是“逢八進一”。

   數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

     還可以表示為(365.7)O = (245.875)D

八進位制的加法是“逢八進一,余數(shù)留下”;減法的規(guī)則是向上一位借一個頂八個。具體操作方法,可參照十六進制的介紹。

7. 八進制數(shù)如何換算成其他數(shù)制的數(shù)?

    答:把八進制數(shù)換算成十進制數(shù)時,用位權展開的方法;換算成二進位時,是把八進制數(shù)直接展開成二進制數(shù)的方法;換算為十六進制數(shù)時,是把八進制數(shù)按二進制數(shù)展開后,再以小數(shù)點為界,按四位一組的方法分組,然后改用十六制數(shù)表示即可。具體方法如下:

    ⑴ 八進制換算成二進制數(shù)的方法:用一拆三的方法,即把每一個八進位數(shù)都轉換為三位二進制數(shù)表示。

    例:將八進制數(shù)604.05轉換成二進制數(shù)時,結果為:

                     (604.05)8=(110  000  100.000  101)2

或          (604.05)O = (110 000 100.000 101)B           

    ⑵ 八進制數(shù)換算為十進制數(shù)的方法:用計算位權的方法。例如,當將八進制數(shù)的345.6換算成十進制的數(shù)時,結果為:

         數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

或表示為       (345.6)O = (229.75)D

    ⑶ 八進制數(shù)換算為十六進制數(shù)的方法:首先把八進制數(shù)換算為二進制數(shù),再換算為十六進制數(shù)。例如,將八進制數(shù)5237.6換算為十六進制數(shù)時,可以這樣計算:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

或表示為 (5237.6)O = A9F.CH = oxA9F.C=&HA9F.C

8. 什么是十六進制數(shù)?如何運算?

    答:十六進制數(shù)的基數(shù)R為16,即“逢十六進一”。它含有16個數(shù)字符號:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A、B、C、D、E,F(xiàn)分別表示十進制數(shù)10、11、12、13、14、15。位權為16i。

    ⑴ 十六進制加減法:當十六進制數(shù)相加時,若某一位上的數(shù)碼之和S小于16時,與十進制加法相同;加法運算時是滿16進一,余數(shù)留下;減法時是借上一位是16,余數(shù)留下。具體方法如下;

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

    ⑵ 十六進制數(shù)的乘法可以用十進制數(shù)的乘法規(guī)則來計算,但結果必須用十六進制數(shù)來表示。

    ⑶ 十六進制數(shù)的除法可以根據(jù)其乘法和減法規(guī)則處理。

9.十六進制數(shù)如何換算成其他數(shù)制的數(shù)? 

   答:把十六進制數(shù)換算成十進制數(shù)時,用位權展開的方法;換算成二進制數(shù)時,是把十六進位數(shù)直接用二進位制數(shù)展開的方法。如果是轉換為八進制數(shù),再把這個二進制數(shù)以小數(shù)點為界,以三位為一組劃分開,然后再轉換為八進制的方法。具體方法如下:

    ⑴ 十六進制換算成二進制數(shù)的方法:用“以小數(shù)點為界,一拆四”的方法,即把每一個十六進位數(shù)都轉換為四位二進制數(shù)表示。

    例:將十六進制數(shù)6F.C轉換成二進制數(shù)時,結果為:

                          (A6F.C)16 = (1010 0110 1111 .1100)2

或表示為         (A6F.C)H = (101001101111.1100)B

    ⑵ 十六進制數(shù)換算為十進制數(shù)的方法:用計算位權的方法。例如,當將十六進制數(shù)的A6F.C換算成十進制的數(shù)時,結果為:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客   

  其實,當把十六進制整數(shù)轉換為十進制整數(shù)時,也可以用逐步累加的方法。思路是:本位的累加數(shù)等于上位累加數(shù)乘16,再加上本位數(shù)。對上題整數(shù)部分的計算過程如下:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

     即(A6F)H=2671D 。

    ⑶ 十六進制數(shù)換算為八進制數(shù)的方法:首先把十六進制數(shù)換算為四位二進制數(shù),再以小數(shù)點為界,按三位為一組重新組合后,再換算為八進制數(shù)。例如,將十六進制數(shù)A9F.6換算為八進制數(shù)時,可以這樣計算:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客


    最后這個表達式說明:表示十六進制數(shù)時,至少有4種表示方法;而表示八進制數(shù)時,至少有兩種方法。 

 10. 十進制數(shù)如何換算為其他數(shù)制的數(shù)?

       答:十進制數(shù)換算為二進制、八進或十六進制時,對于整數(shù)和分數(shù)應該用不同的方法進行轉換。介紹如下:

    ⑴ 十進制整數(shù)轉換為其他數(shù)制整數(shù)的方法:設其他數(shù)制的基數(shù)是R,則當把十進制整數(shù)轉換為R進制整數(shù)時,是采用“除R取余”法。具體步驟是:把十進制整數(shù)除以R,得一商數(shù)和一余數(shù);再將所得的商除以R,又得到一個新的商數(shù)和余數(shù);這樣不斷地用R去除所得的商數(shù),直到商數(shù)為零,即余數(shù)小于R為止。

    轉換結果是這樣表示的:把各次所得的余數(shù)按逆序排列起來就是所求的結果了??珊営洖椤俺齊取余;逆向排序”

例1. 將十進制整數(shù)375轉換成二進制整數(shù)。

解:按“除2取余”法計算時,運算過程見左面的圖示。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客   

 右面是用減法計算時的步驟,對二進制位權比較熟悉時,用這個方法也是可以的。要求根據(jù)被減數(shù)的大小適當選擇減數(shù),這個減數(shù)應該是位權的值,用過的位權位是“1”;沒有用過的是“0”。

    如果你感到用上述連除的方法不方便,也可以用分散除法來計算。見下面的計算步驟:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

    例2. 把十進制整數(shù)684轉換為八進制數(shù)。

解:按“除八取余”法的計算過程如下:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

應提請注意的是:在數(shù)字684   后面的是英文字母o,不是阿拉伯數(shù)字零。

例3. 把十進制數(shù)2671轉換為十六進制數(shù)

    解:方法是:將十進制數(shù)除以16,商是166,余數(shù)為15;把商166再除以16,其商是10,余數(shù)6。因為商是10,已經(jīng)小于16了,不能再除了。因此,應該把這個10當作十六進制數(shù)的首位,再按逆順序取余數(shù)6和15,合起來得”A6F”,即有2671D = A6FH ,下式就是計算過程。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

(2)十進制小數(shù)轉換為其他數(shù)制小數(shù)的方法

    把十進制小數(shù)轉換為基數(shù)為R的小數(shù)時,其方法是:用基數(shù)乘以十進制小數(shù),取出乘積中的整數(shù)(對二進制數(shù)是0 或 1;對八進制數(shù)是0~7;對十六進制數(shù)為0~F)后,繼續(xù)用R乘剩下的小數(shù),再次取出整數(shù)……。如此反復,直至剩下的小數(shù)為零或者取夠所需的位數(shù)為止。計算結果是:把取出來的整數(shù)按正順序排列在小數(shù)點后就行了。具體步驟見下述各例題。   

    例1. 將十進制小數(shù)0.75和0.67轉換成二進制小數(shù)。

    解:其結果是0.75D=0.11B;0.67D = 101010B。詳見下面的計算步驟。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

   

       例2 將十進制數(shù)0.75和0.63轉換為八進制數(shù)

   解:結果是0.75D = 0.60O;0.63D = 0.5024O。計算過程如下:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

   例3 把十進制小數(shù)0.75和0.67換算為十六進位制小數(shù)

   解:0.75D =0.CH ;0.67D =0.AB8H ,運算步驟如下:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客 

如果你感到用連乘法不方便,或者覺得轉換后的有效位數(shù)太少,也可以用分散乘法計算。步驟如下:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

 二. 編碼的基本知識

11. 什么是編碼?什么是字符集?

    答:計算機的芯片(包括CPU和內(nèi)存條等)是邏輯電子器件,是由億萬個晶體管組成的大規(guī)模集成電路,這些晶體管在高電位時接通;低電位時斷開。人們正是利用晶體管的這種開關特性進行信息交流,并制成了計算機。因為在通訊技術領域和在電腦技術中,是把接通定為“1”;把斷開定為“0”的。所以,如果電路連續(xù)接通兩次,就是兩個“1”,即“11”;如果接通兩次后中間斷了一次,而后又接通了,這就是“1101”。如果通訊的雙方共同商議好:什么樣的數(shù)字代表什么意思或代表什么符號,只要由一方發(fā)出一組用“1”和“0”組成的數(shù)碼時,對方就知道是什么意思或什么符號了。這就是編碼(Coding)的基本概念。

    在計算機中,數(shù)字、符號、圖形、語音等信息都是用“1”和“0”這兩個最基本的狀態(tài)符號來表達、存儲和傳輸?shù)模驗橛嬎銠C只認識機器語言,即由“0”和“1”碼組成的語言。

    用“0”和“1”這兩個狀態(tài)符號做出不同的組合,以表示不同的字符(Character),這就是編碼。例如,在ASCI I編碼中,用“1000001”這種組合表示大寫字母“A”; 用“0110001”這種組合表示數(shù)字“1”。把各種狀態(tài)符號的組合對應的字符匯編起來,就是字符集或符號集。當然如果用二進制數(shù)表示編碼,就太麻煩了,因此,編碼大都用十進制數(shù)或16進制數(shù)表示。

12. 計算機常用的國際通用編碼有哪些?

    答:目前最通用的是ASCII碼,它是用來表示英文字符的一種編碼規(guī)范,是在信息領域中的一種國際通用的編碼。我國也不例外。

    ASCI I碼是單字節(jié)編碼,每個字節(jié)由7位二進制數(shù)組成,最高位(b7)為“0”。因此,編碼范圍是0~127,即有128個字位。人們把這種編碼稱為基本ASCI I碼或標準ASCI I碼。詳細情況可參見有管ASCI I編碼的問答。

    由于基本ASCI I碼的范圍有限,各個國家和地區(qū)為了適應自己的需要,大都在ASCI I碼的基礎上編制了自己的編碼,很不統(tǒng)一。為此,國際上誕生了Unicode碼。

    Unicode碼是國際上幾個大的電腦硬件和軟件制造商聯(lián)合制定的一種編碼,其版本已經(jīng)是unicode 5.0或以上了。另外,國際標準化組織(ISO)和國際電工委員會(IEC)也有相應編碼標準,名稱是“通用多八位編碼字符集”,編號是ISO/IEC 10646,目前已經(jīng)是ISO/IEC 10646:2003或以上了。這些組織制定的相應編碼方法都是相同的,也是國際上通用的。不過,人們都叫它為Unicode碼,也稱UCS(Universal character Set)碼或ISO/IEC 10646通用字符集。   

    我國的GB1300標準與ISO/IEC 10646相對應,即我國等同采用ISO/IEC 10646標準。

    這種編碼有兩種格式:UCS-2和UCS-4。顧名思義,UCS-2就是用兩個字節(jié)編碼,UCS-4就是用4個字節(jié)編碼。不過,目前實際使用的是UCS-2。這種編碼的每個字符是由16位二進制數(shù)表示的。所以,理論上說,它可以有2^16=65536個碼位?;旧峡梢院w世界上所有的語言和字符,當然也包括中文字符。

    在計算機中的“字符映射表”就是Unicode的字符集。這種編碼有漢字20902個,編碼范圍是4E00~9FFF。但是,Unicode碼和我國的標準GB2312并不兼容。例如,“謙”字的區(qū)位碼是十進制數(shù)3911;而Unicode碼是十進制數(shù)35878。

13. 什么是Unicode碼?

    答:見上一問。

14. 什么是UCS-2碼?什么是UTF-8碼?

   答:UCS只是一個字符集,如果直接用它進行傳輸和處理時就遇到以下問題:因為用一個字節(jié)表示的ASCII碼早已廣泛應用,UCS-2碼又在標準ASCII碼的基礎上另外增加一個全部為零的字節(jié),使本來是一個字節(jié)的編碼變成了兩個字節(jié),徒添麻煩,人們感到不方便。更重要的是:在C語言和很多類Unix系統(tǒng)里面,一個字節(jié)的ASCI I碼往往有控制作用,可以做轉意字符,在文件或庫函數(shù)里有特殊的作用,而兩字節(jié)的Unicode碼則無法應用。此外,不同的系統(tǒng)平臺的設計理念不同,對編碼的要求也不完全一致。例如,同是一個Unicode編碼U+4E59,蘋果機可能認為是“奎”字;PC機則認為是“乙”字。為了解決這些問題,UTF出現(xiàn)了。

UTF(UCS Transformation Format)是UCS 轉換格式的意思,怎樣轉換呢?有許多方法,例如:UTF-8、UTF-16小尾序(Unicode)、UTF-16大尾序(Unicode big-enddian)、UTF-32、UTF-7等等。

最常用的方法之一是UTF-8碼轉換法,這種方法這是一種變長編碼,它將基本ASCII字符仍用7位編碼表示,占用一個字節(jié)(首位補0)。而遇到與其他 Unicode 字符混合的情況,將按一定算法轉換,每個字符使用1-3個字節(jié)編碼,并利用首位為0或1進行識別。這樣對以7位ASCII字符為主的西文文檔就大大節(jié)省了編碼長度。它既保留了Unicode的優(yōu)勢,又能夠與ASCII兼容。

15. UCS-2碼和UTF-8是怎樣轉換的?

      答: UCS-2是一個雙字節(jié)的Unicode字符集,但是,在使用中存在以上問題。因此,出現(xiàn)了UTF-8,UTF-8的編碼字節(jié)數(shù)則是可變的,理論上說它可以用1~6個字節(jié)表示,這就解決了以上的難題。怎么變呢?

    對基本ASCII碼來說, UTF-8用一個字節(jié)來表示,即它和基本ASCII碼兼容;對位于0080H~07FFH范圍內(nèi)的UCS-2編碼,用兩個字節(jié)表示;對于漢字來說(在UCS-2中,它在0800H~FFFFH范圍內(nèi)),UTF-8用三個字節(jié)表示。在下表中列出了Unicode編碼范圍和與之對應的UTF-8編碼模板。只列出了1~3個字節(jié)的情況。當進行轉換時,其中的紅色數(shù)字是必須保留的,打“×”的二進制數(shù)是由UCS-2編碼依序移置過來的:

表5 UCS-2轉換為UTF-8的模板

UCS-2的編碼范圍

UTF-8表示方法

0000H~007FH

0×××××××

0080H~07FFH

110×××××× 10××××××

0800H~FFFFH

1110×××× 10×××××× 10××××××

   

    例 1:已知“A”字的ASCII碼是41H,求用UTF-8表示的“A”字的編碼。 

    解:數(shù)41H是處于0000H~007FH的范圍內(nèi)的數(shù),所以,應該用一個字節(jié)表示。因為16進制數(shù)41H用二進制數(shù)表示時是01000001,套用上表的模板,用UTF-8表示時,UTF-8的編碼也是01000001。

    例 2:已知中文“漢”字的UCS-2編碼是6C49。求UTF-8對“漢”字的編碼。

    解;6C49在0800-FFFF之間,所以,從上表可知,在UTF-8中,“漢”字肯定要用3字節(jié)的模板表示。因為將6C49寫成二進制時是:0110 110001 001001,套用上表的模板,“漢”字的UTF-8的編碼就是11100110 10110001 10001001,即為E6  B1  89。

16. 什么是codepage?

  答:codepage就是各國的文字編碼和Unicode之間的映射表。因為編碼在世界范圍內(nèi)都統(tǒng)一了,但是,各個國家或地區(qū)的編碼仍然存在著,為了兼容原先各國的文字編碼,必須有此類映射表。簡體中文和Unicode的映射表就是CP936。即codepage=936 簡體中文GBK。

    如漢字的“大”字,其國標碼是3473H,在UCS的編碼為00005927H,即在00組,00面,59H行,第27H字位上。這個換算關系,在Codepage936 中可以查到。

17. 什么是EBCDIC碼?

    答:盡管ASCI I碼是計算機世界的主要標準,但在許多IBM大型機系統(tǒng)上卻沒有采用。在IBM

的System/360計算機中,IBM研制了自己的8位字符編碼——EBCDIC碼(Extended Binary Coded Decimal Interchange Code,擴展的二-十進制交換碼)。該編碼是對早期的BCDIC 6位編碼的擴展,其中一個字符的EBCDIC碼占用一個字節(jié),用8位二進制碼表示信息,一共可以表示出256 種字符。   

18. 什么是BCD碼?

   答:BCD(Binary Coded Decimal)碼是用二進制數(shù)表示十進制數(shù)的方法,也就是說,它是討論怎樣用一種數(shù)制的數(shù)來表示另一種數(shù)制的數(shù)的方法的,因此,經(jīng)常把BCD碼稱為代碼。但是,也經(jīng)常稱之為編碼。而本問答集所討論的編碼是怎樣把文字符號用數(shù)字編碼的問題。因此,這兩種編碼并不是一回事。也不是本問答集的主題。但是,還是需要介紹一下BCD碼。

  為什么需要BCD碼呢?因為人們在生活中最熟悉的計數(shù)制是十進制,而在計算機處理數(shù)據(jù)時是用二進制的,因此,BCD碼的二進制數(shù)的形式可以滿足數(shù)字系統(tǒng)的要求;BCD碼的十進制的形式,可以適應人們的計數(shù)習慣。

   BCD碼有8421碼、5421碼、5211碼、2421碼和余3碼等幾種,但是,最常用的是8421碼。在下表中列出了幾種數(shù)制中的個別數(shù)跟8421BCD碼的對照。

表6  8421BCD碼和其他數(shù)制的關系

十進制數(shù)

二進制數(shù)

十六進制數(shù)

8421BCD碼

0

0000 0000

0

0000 0000

1

0000 0001

1

0000 0001

2

0000 0010

2

0000 0010

9

0000 1001

9

0000 1001

10

0000 1010

10

0001 0000

11

0000 1011

11

0001 0001

19

0001 0011

13

0001 1001

100

0110 0100

64

0001 0000 0000

255

1111 1111

FF

0010 0101 0101

        

    由此表可以看出,8421BCD碼跟二進制數(shù)在十進制數(shù)0~9的范圍內(nèi)是完全對應的。從10以后就不相同了。也就是說BCD碼是由“1001”加1后,直接進位為“1 0000”的。之所以出現(xiàn)這種情況,是因為8421BCD碼的編碼規(guī)定造成的。因為BCD碼規(guī)定用二進制數(shù)表示十進制數(shù)時,不管十進制數(shù)的位權是什么,只要把這個十進制數(shù)轉換成二進制數(shù)就可以了。例如,把十進制數(shù)“23.5”直接改寫為“0010 0011.0101”就是BCD碼了。

    這里所說的“8421”實際上就是四位二進制數(shù)的權。因為根據(jù)8421碼的規(guī)定,為了表示十進制數(shù)中的任意一串數(shù),只用四位二進制數(shù)就可以了。四位數(shù)可以組合為16種狀態(tài),足以表示十進制數(shù)的十個數(shù)了(如果用三位,只能組合成八種狀態(tài),就不夠)。因此,四位二進制數(shù)的最后六個數(shù)不被采用,稱它們是8421BCD碼中非法的數(shù)。這六個非法數(shù)是1010,1011,1100,1101,1110,1111。

例1:寫出十進制數(shù)19的BCD碼。

    解:由上表知19D=(0001 1001)BCD

例2:寫出十進制數(shù)489.15的8421BCD碼。

    解:(489.15)10=(0100 1000 1001.0001 0101)BCD

例3:將(0001 1011.0010 0101)BCD碼轉換為等值的二進制數(shù)。

    解:不能求解,因為“1011”在8421BCD碼中是非法的。

例4:將二進制數(shù)01000111轉換為BCD碼。

     解:(01000111)B = (71)D=(0111 0001)BCD  

19. 我國已經(jīng)頒布的有關編碼標準有哪些?

答:目前,漢字字符集有如下幾種:

    ⑴ GB 2312-80漢字編碼:GB2312碼全稱《信息交換用漢字編碼集——基本集》,標準號為GB2312-80,是中國國家標準漢字信息交換用編碼,習慣上稱國標碼,新加坡也使用這一編碼。共有7445個圖形字符。其中漢字6763個,漢字以外的圖形字符682個。詳見有關區(qū)位碼、國標碼的問答。

 ⑵ GBK編碼(Chinese Internal Specification): GBK(是“國家標準擴展”的意思)全稱《漢字內(nèi)碼擴展規(guī)范》,是全國信息技術標準化技術委員會1995年12月1日制訂的。

 GBK向下與GB2312-80編碼兼容,向上支持ISO10646.1國際標準。共收錄漢字21003個、符號883個,并提供1894個造字碼位,簡、繁體字融于一庫。IBM等大公司都支持這個標準。

⑶ CJK編碼:是包含在ISO/IEC 10646標準的一部分。其中包含了中、日、韓統(tǒng)一的象形文字27484個。簡稱CJK字符,即中日韓三國的字符編碼集。

⑷ GB18030-2000編碼: GB18030-2000編碼標準是在原GB2312-80編碼標準基礎上擴展而成的。采用單字節(jié)、 雙字節(jié)和四字節(jié)三種方式編碼,編碼空間達160多萬個?;酒矫娴臐h字數(shù)達27533個。同時還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字。

GB18030-2000支持全部CJK統(tǒng)一漢字字符,也解決了內(nèi)陸使用GB碼與港臺地區(qū)使用BIG-5碼間轉換不便的狀況。GB18030-2000的修訂版GB18030-2005又有所擴展,有70244個漢字。

⑸ GB 12345—90《信息交換用漢字編碼字符集第一輔助集》:該標準共收錄了6866個漢字,純繁體字有2200多個。主要是為古籍整理用的。

⑹ BIG-5: BIG-5碼是通行于臺灣、香港地區(qū)的一個繁體字編碼方案,俗稱“大五碼”。

20. 什么是“位”?什么是“字節(jié)”?

    答:二進制數(shù)是由“1”和“0”組成的,也就是說,二進制數(shù)中0和1是構成二進制數(shù)的最小單位,也是計算機傳遞信息的最小單位,我們把這個最小單位稱為位(bit),也稱比特,符號為b 。每個位不是“1”就是“0”,或者說“1”占一個位;“0”也占一個位。各個位的名稱、位權和相當?shù)氖M制數(shù)見下表。 

表7  二進制數(shù)的位和位權

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

   

    在計算機中,每8個位組成一個字節(jié),例如上表的二進制數(shù)有8位,就構成了一個字節(jié)(Byte),字節(jié)的符號是B。一個英文符號一般用一個字節(jié)表示;一個漢字至少要用兩個字節(jié)表示。字節(jié)是存儲器中保存數(shù)據(jù)的最小單位。 

21. 1個千字節(jié)KB是多少字節(jié)?

    答:由于計算機使用二進制數(shù),2的10次冪(等于十進制數(shù)的1024)與十進制數(shù)的1000近似,所以,在計算機中“千字節(jié)”是按二進制數(shù)定義的,即有

1KB=2^10 B=1024 B。所以,1MB=2^20B=1048576B=1024KB;同理,1GB=2^30B=1024 MB ;1TB=2^40B=1024GB。

    其中KB、MB、GB、TB分別稱為“千字節(jié)”、“兆字節(jié)”、“ 吉字節(jié)”和“太字節(jié)”,都是千倍關系。但是,在有些場合(如硬盤商)把1KB當作1000B;余依此類推。因此,因為使用方法不同,經(jīng)常發(fā)生名義字節(jié)和實測字節(jié)不一致的情況發(fā)生。

還應該提醒的是:在計量單位的國家標準中,“ k”是詞頭符號,應該用小寫,可是,在計算機中,似乎它和兆(M)平起平坐了,都是大寫。

22. 什么是“字”?什么是字長?

    答:字(Word)是計算機進行信息交換、處理、存儲的基本單元。一條指令或一個數(shù)據(jù)信息,稱為一個字。也就是說,字是指計算機一次并行處理的一組二進制數(shù),它由若干個字節(jié)組成。

   一個字所包含的位數(shù)稱為字長(Word Length)。字長不是固定值,跟CPU的型號有關。曾經(jīng)有過8、16和32位之分,目前主流計算機都是64位的。當我們說計算機是32位時,就是指的是這臺計算機的CPU的字長是32位?;蛘哒f這臺計算機的CPU能在單位時間內(nèi)處理字長為32位(即4個字節(jié))的二進制數(shù)據(jù)。

  字長實際上是CPU內(nèi)部總線的位寬。字長與CPU的寄存器數(shù)目有關,但是,不能說字長就是寄存器的數(shù)目。字長也與CPU內(nèi)部總線有關,但是,不能說字長就是CPU內(nèi)部總線數(shù)。 

23. 什么是ASCII碼?

   答:ASCI I(American Standard Code for Information Interchange,美國信息互換標準代碼),是目前國際上普遍采用的字符系統(tǒng),它是基于羅馬字母表的一套電腦編碼系統(tǒng),它主要用于顯示現(xiàn)代英語國家的語言。因為國際標準化組織(ISO)已經(jīng)把它采用作為國際標準,編號為ISO 646,所以,ASCI I碼也是國際通用的編碼標準。這個編碼還叫基本ASCI I碼或標準ASCI I碼,以與擴展ASCII碼相區(qū)別。標準ASCI I碼與我國的編碼標準是兼容的。

  ASCI I碼占用一個字節(jié),即8位(參見上表)。但是,只使用其中b0~b6位,共7位,用于編碼;最高一位(即b7位)是0,可以作為奇偶校驗位。這樣一來,可以編碼的數(shù)目就是128個。編碼范圍用十進制數(shù)表示就是0~127,用二進制數(shù)表示為00000000B~ 01111111B。這里,在二進制數(shù)的數(shù)字后面加上B,表示這是一個二進制數(shù)?!岸M制”的原文是“Binary”或“Binary System”。 在表格中,經(jīng)常用“Bin”或“B”來注明這是一個二進制數(shù)。

 下表就是用十進制數(shù)表示的ASCI I碼表的符號編碼部分。例如“K”字的編碼是75,它的二進制編碼就是01001011B。在表中的第32個碼是空格碼;第128個碼是歐元的代碼,原本不是標準ASCII碼。還有0~31和第127號碼,共33個,是控制碼,是不能顯示和打印的。這33個碼的含義見下一問。

  雖然標準ASCII碼是7位編碼,但由于計算機處理數(shù)據(jù)是以字節(jié)為最小單位的,所以一般仍以一個字節(jié)來存放一個ASCII字符。每一個字節(jié)中多余出來的一位(最高位)在計算機內(nèi)部通常保持為0。在數(shù)據(jù)傳輸時可用這一位作奇偶校驗位。 

 

表8  ASCII碼的字符部分

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

24. 如何用鍵盤輸入ASCII字符?.

 答:目前的計算機大都支持ASCII碼,所以,當你按鍵盤上的“A”字時,計算機接收到的信息就是二進制數(shù)碼“0100 1001”,但是,它顯示給你的卻是一個“A”字。

如果你想用按鍵盤的方法讓計算機顯示出ASCII碼所代表的字符,也是可以的。不過,不能用鍵盤直接鍵入二進制數(shù)碼的方法,因為如果這樣做,就太不方便了,何況計算機的設計者也沒有這樣設計。怎么辦呢?

因為Unicode碼和基本ASCII碼是兼容的,所以,可以利用字符映射表來輸入ASCII碼的字符。方法是:點擊小鍵盤區(qū)的“Num Lock”鍵使“Num Lock”綠色顯示燈亮起來。進入小鍵盤區(qū)后,按住“Alt”鍵,鍵入ASCII碼的十進制數(shù)(例如數(shù)字“65”)后,再松開“Alt”鍵,“A”字就顯示出來了。因為,你鍵入的數(shù)碼是“65”,但是,計算機收到的信息是“0100 0001”。

    ASCII碼除了可以用二進制數(shù)和十進制數(shù)表示以外,還可以用8進制和16進制的數(shù)表示。不管用哪個數(shù)制,計算機執(zhí)行的都是二進制碼。

25. 請介紹ASCII碼前32個控制碼的含義!

    答:可見下表的說明。

表9  ASCII碼的控制碼說明

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

26. 什么是擴展ASCII碼?

  答:由于標準ASCII字符集字符是7位代碼,編碼數(shù)目最多為128個,在實際應用中往往無法滿足要求。為此,國際標準化組織又制定了ISO 2022標準,它規(guī)定了在保持與ISO 646兼容的前提下將ASCII字符集擴充為8位代碼的統(tǒng)一方法,即將b7位不再作為奇偶檢驗用,也把它納入編碼范圍。ISO陸續(xù)制定了一批適用于不同地區(qū)的擴充ASCII字符集,每種擴充ASCII字符集分別可以擴充128個字符,這些擴充字符的編碼稱為擴展ASCII碼。在下表中列出了擴展ASCII編碼表。在 0128~0255內(nèi)的編碼都屬于這個范圍。

由于中國的漢字編碼的機內(nèi)碼是用兩個8位的字節(jié)編碼,所以,和擴展ASCII碼并不兼容;擴展ASCII碼與Unicode碼也不兼容。例如,對符號“±”來說,擴展ASCII碼的十進制數(shù)是“241”;Unicode碼的十進制數(shù)是“0177”;國標碼的十進制數(shù)則是“0132”。

表10  擴展ASCII碼表

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

27. 怎樣查找出任一字符的Unicode碼?

    答:在Unicode里,所有的字符被一視同仁。漢字不再使用“兩個擴展ASCII”,而是使用“1個Unicode碼”,所以,現(xiàn)在的漢字是“一個字符”了。

  要想查出已知字符的Unicode碼,有兩個方法,較麻煩的方法是用Win XP的字符映射表查,步驟:

  ①“開始”→“全部程序”→“附件”→“系統(tǒng)工具”→“字符映射表”→從顯示出來的字符映射表中找到你要查的字符(例如“實心星”★),并點擊它;

  這時在映射表的左下角會出現(xiàn)“U+××××”字樣,這就是Unicode碼的表示方法:在“U+”后面的4個“×”就是16進制數(shù)的Unicode編碼(這里是2605)。好了。把這個4 位的16進制數(shù)記住,再用計算器算出它的十進制數(shù)是什么。可以用手工計算出來,計算方法見前面的問答。比較方便的是用計算機內(nèi)的計算器計算,若用計算器計算,可見下一步;

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

     ② “開始”→“全部程序”→“附件”→“計算器”→進入“科學計算”模式,點擊選中“⊙十六進制”(如下圖)→在右面的窗格中輸入這個16進制數(shù)→再點擊選中“⊙十進制”→這時在計算器的顯示屏中就會顯示出十進制數(shù)(這時是“9733”),記住它;

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

圖2  計算器

   ③ 單擊小鍵盤區(qū)的“Num Lock”鍵,進入小鍵盤區(qū)→按住“Alt”鍵,用小鍵盤鍵入十進制數(shù)(這時是9733)→把“Alt”鍵松開,這時就會出現(xiàn)一個實心星號★。

  還有一個簡單的方法查出字符或文字的16進制數(shù)碼,方法是:選中這個字符(也可以把鼠標置于它的右邊)后,按“Alt+X”鍵,這時,這個符號就變成了十六進制數(shù)了。不過,大前提是在你的屏幕上已經(jīng)有了這個字符。例如,當你將鼠標的指針放到前面這個“到”字的后面按“Alt+X”鍵時,這個“到”字就變成“5230”了。當你再按一次“Alt+X”鍵時,“到”字又回來了。

  此外,也可以用關鍵詞“Unicode”或“Unicode編碼表”到“百度”或“谷歌”去搜索Unicode編碼表。 

28. 如何把Unicode編碼轉換為相應的字符?

   答:已經(jīng)知道某個符號的十六進制編碼時,也有兩種方法把它轉換為字符。第一種方法是把這個十六進制數(shù)換算為十進制數(shù)后,進入小鍵盤區(qū),按住“Alt”→鍵入這個十進制號碼后,松開“Alt”鍵,字符就顯示出來了。下表是若干特殊字符的Unicode十進制編碼,供參考。

表11  常用字符的Unicode十進制編碼摘錄

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

    最簡單的方法是直接把這個十六進制數(shù)輸入到Word文檔,并用鼠標選中這它,再按“Alt+X”組合鍵,這個十六制數(shù)就變成符號了。不過,在上表中給出的是十進制數(shù)(用Dec標明了),要想采用這個方法時,還必須把它轉換成16進制才行。例如,不等號≠的十進制數(shù)是8800,轉換成16進制數(shù)時是2260。

29.  Unicode碼和ASCII碼是什么關系?

    答:Unicode碼是晚于ASCII碼出世的,Unicode是雙字節(jié)碼,ASCII碼是單字節(jié)碼,所以,二者是不兼容的。但是,當把UCS轉換為UTF-8表示時,Unicode碼是與ASCII則是兼容的。 

三. 漢字編碼知識

30. 請介紹計算機對漢字信息的處理過程?

答:現(xiàn)代的計算機的鍵盤都是用西洋文字標注的,所以,對英文字符的輸入、存儲、內(nèi)部處理和輸出都可以只用同一個編碼(如ASCII碼),因此相對容易??墒?,漢字是一種象形文字,字數(shù)極多,同音字也多,如果讓計算機也能對漢字信息進行處理,就必須將漢字代碼化,即對漢字進行編碼,然后才能對漢字信息進行處理。

 計算機在處理漢字信息的過程不同,對編碼的要求和方法也不同。例如,要想讓計算機對漢字進行處理,第一步就是把漢字信息輸入到計算機中去,這時需要的是輸入碼(Chinese  Character input Code );要想讓計算機能夠?qū)@個漢字信息進行保存和處理,必須把輸入碼變換成機內(nèi)碼(Chinese  Characters Internal  Code)。輸出漢字時,如果是送往終端設備或其他漢字系統(tǒng),則需要把漢字內(nèi)碼變換成標準漢字交換碼(Chinese  Character Exchange   Code)后,再進行傳送。如果需要把處理結果顯示或打印出來,就需要把機內(nèi)碼變換成字形碼(Chinese  Character Font  Code)。也就是要按一定的規(guī)則到漢字字形庫中取出漢字的字形碼,送往顯示器或打印機。這個漢字處理過程所用的編碼用圖形表示如下圖:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客  

圖3   計算機對漢字的處理過程

31. 請概要介紹處理漢字信息的要點

    答:概括地講,用計算機處理漢字信息時,需要解決的幾個問題:

 (1) 怎樣將漢字輸入計算機?(用漢字輸入編碼,即用外碼)

 (2) 在計算機內(nèi)部怎樣處理漢字?(用機內(nèi)碼,即內(nèi)碼,也叫處理碼)

 (3) 在計算機之間怎樣交換漢字信息?(用交換碼,也稱國標碼)

 (4) 計算機如何實現(xiàn)漢字信息的輸出?(用圖形碼,或點陣方式或矢量方式或輪括方式)。

    此外,還應該知道:機內(nèi)碼和交換碼是由區(qū)位碼派生出來的;字形碼和內(nèi)碼是一一對應的。不管是什么碼,計算機執(zhí)行的都是二進制碼。

32, 什么是漢字的輸入碼?

  答:漢字輸入碼是為了將漢字通過鍵盤輸入計算機而設計的編碼。輸入碼也稱外碼。各種輸入碼有六七百種,但是,歸納為四大類:

 ⑴ 數(shù)字編碼(如區(qū)位碼、電報碼等),也稱流水碼,這種編碼方式?jīng)]有重碼,但是,難于記憶和使用;

  ⑵ 拼音碼(如微軟拼音、紫光拼音等),優(yōu)點是記憶方便,使用簡單;缺點是重碼多,輸入慢。適合非專業(yè)的計算機使用人員;

  ⑶ 字形碼(如五筆輸入法),優(yōu)點是重碼少,速度快;缺點是規(guī)則復雜,記憶困難;適合專業(yè)人員或?qū)τ嬎銠C使用頻繁的場合;

  ⑷ 音形碼(如智能ABC輸入法)。

 雖然各種編碼方法各不相同,但是,對同一個字符來說,各種編碼方法最終得到的漢字的機內(nèi)碼必然是相同的。

33. 什么是漢字的區(qū)位碼?

答:根據(jù)我國的國家標準GB 2312—80規(guī)定,所有的國標漢字與符號組成一個94×94的方陣,在此方陣中,每一行稱為一個“區(qū)” (區(qū)號為01~94 ),每一列稱為一個“位” (位號為01~94 ),見下圖。該方陣實際組成了一個94×94=8836的保存字符的方格(方格未畫出),每個小方格就是一個字符位。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客 

圖4  區(qū)位碼的解釋

這個方格是用區(qū)位碼(Zone Bit Code)定位的。區(qū)碼(Zone Code)按行排;位碼(Bit Code)按列排。區(qū)碼和位碼各用兩位十進制數(shù)字表示。區(qū)碼和位碼簡單地組合在一起(即兩位區(qū)碼居高位,兩位位碼居低位)就形成了“區(qū)位碼”。例如,“愛”字位于第16區(qū)14位,所以,“愛”字的區(qū)碼是“16”;位碼是“14”,合起來的區(qū)位碼為1614。

漢字在區(qū)位碼表的排列是有規(guī)律的。在94個分區(qū)中, 01~15區(qū)為圖形符號區(qū),其中,01~09區(qū)為標準區(qū), 10~15區(qū)為自定義符號區(qū)。16~55區(qū)為一級常用漢字區(qū),共有3755個漢字,該區(qū)的漢字按拼音排序。56~87區(qū)為二級非常用漢字區(qū),共有3008個漢字,該區(qū)的漢字按部首排序??倽h字為6763個。88~94區(qū)為用戶自定義漢字區(qū)。由此可知,漢字編碼所占的區(qū)位為72×94=6768,其中有5個空位。數(shù)字72的由來是 94-15-(94-87)=72。

34. 怎樣用區(qū)位碼輸入法輸入漢字和字符?

  答:在Win XP中有區(qū)位碼輸入法,可以用下述方法把它調(diào)出來:右擊任務欄系統(tǒng)托盤區(qū)的輸入法圖標→點擊“設置”→在“文字服務和輸入語言”窗口選擇“中文(簡體)內(nèi)碼”→“確定”后,區(qū)位碼輸入法就被調(diào)出來了。為了便于使用,還可以設定快捷鍵。

 進入?yún)^(qū)位碼輸入環(huán)境后,在Word文檔的主鍵盤區(qū)直接鍵入?yún)^(qū)位碼就可以顯示出相應的字符了。關鍵是你要事先知道某個符號的區(qū)位碼。要想知道某個字符的區(qū)位碼,還需查區(qū)位碼表,所以用這個方法不是太方便的。

35. 請給出區(qū)位碼表!

 答:因為該表所占字節(jié)太多,不便在這里給出。請參見本文的附件《漢字區(qū)位碼表》。下面給出一些常用符號的編碼。

表12  區(qū)位碼符號摘錄

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

 

36. 什么是漢字的交換碼?

  答:漢字交換碼(Chines Character Exchange Code)是指具有漢字處理功能的不同的計算機系統(tǒng)之間在交換漢字信息時所使用的代碼標準。

 為什么當進行信息交換時,必須把區(qū)位碼轉換為交換碼呢?這是因為區(qū)位碼(Zone Bit Code)是無法用于漢字通信的,因為它可能與通信使用的標準ASCII碼的控制碼(即0D~31D或00000000B ~00011111B)發(fā)生沖突。例如,“愛”字的區(qū)位碼是1614,如果仿照ASCII碼的表示方法,用二進制數(shù)表示“愛”字時,就是00010000B  00001110B,可見,“愛”字高位字節(jié)的“00010000B”(16D)和低字節(jié)的“00001110B”(14D)都在ASCII碼的控制符區(qū)內(nèi),從而發(fā)生沖突。

 因為ASCII碼是國際通用編碼,我們也需要它,所以,漢字編碼必須避開這一個區(qū)域,因此,ISO2022規(guī)定每個漢字的區(qū)號和位號必須分別加上32D(即二進制數(shù)00100000B,十六進制為20H),經(jīng)過這樣的處理而得的代碼稱為國標交換碼,簡稱交換碼。把高字節(jié)和低字節(jié)都加上“0010000B”后,“愛”字的交換碼就變成了“00110000B  00101110B”(十進制數(shù)分別是48D和46D),從而避免了和標準ASCII碼控制符的沖突。

 交換碼通常是用四位16進制數(shù)表示的。因為48D=30H;46D=2EH,所以“愛”字交換碼的16進制表示為“302EH”。

37. 什么是漢字的國標碼?

  答:國標碼(National Stadard Code)就是上題所說的交換碼。簡單地說:國標碼就是交換碼,它是用兩個b7位為“0”的字節(jié)表示一個漢字的;高字節(jié)=(以16進制表示的)區(qū)號+20H ;低字節(jié)=(以16進制表示的)位號+20H ,從而避開了跟標準ASCII碼中控制碼的沖突,以利信息交換。

38. 什么是漢字的內(nèi)碼?

 答:漢字的機內(nèi)碼簡稱“內(nèi)部碼”或“內(nèi)碼”,它是從交換碼的基礎上演變而來的。因為在中文文本中,漢字與西文字符經(jīng)常是混合在一起使用的,如果漢字信息不予以特別的標識,它與單字節(jié)的標準ASCII碼就會混淆不清。例如上面所說的“愛”字的國標碼是 “00110000B 00101110B”,它雖然不再跟ASCII碼中的控制碼相沖突,但是,如果漢字和西文混編時,“ 愛”字的高位碼“00110000D”(十進位是48)可能被誤認為是數(shù)字“0”;低位的“00101110D”(十進位數(shù)是46)可能被誤認為是英文的句號“.”。

為了避免這種情況發(fā)生,把一個漢字看作兩個擴展ASCII碼,使表示GB2312漢字的兩個字節(jié)的最高位(b7)都等于“1”,即把交換碼的高字節(jié)都增加十進制數(shù)128(或16進制數(shù)80H)。這種高位為l的雙字節(jié)(16位)漢字編碼就稱為GB2312漢字的“機內(nèi)碼”,又稱內(nèi)碼。這樣一來,當程序在運行過程中,只要發(fā)現(xiàn)高字節(jié)是數(shù)字“1”,計算機就知道這是漢字了。

內(nèi)碼通常是以16進制數(shù)表示的。計算方法可見下一問。

39. 什么是漢字的處理碼?

答:漢字的處理碼就是內(nèi)碼,再把上一問概括如下:

內(nèi)碼是以漢字的區(qū)位碼為基礎的,是為了適應漢字和西文混排而產(chǎn)生的。它的編碼方法是:

    內(nèi)碼=(以16進位制表示的)區(qū)位碼+A0A0H。

    例如,“愛”字的區(qū)位碼是“1614”,也就是說它的區(qū)碼是十進制數(shù)16;位碼是十進制數(shù)14。把它們轉換為16進制數(shù)時分別是“10”和“0E”。這樣,以16進制數(shù)表示的“愛”字的區(qū)位碼就是“100E”。當按規(guī)定把這個16進制區(qū)位碼數(shù)加上“A0A0H”時,就變成了“B0AEH”,這個數(shù)就是“愛”字的內(nèi)碼。這個結果和上題的計算結果是一致的,因為B0AEH=10110000B 101011110B。

40. 歸納一下區(qū)位碼、交換碼和內(nèi)碼的用途吧!

    答:簡述如下:

 ⑴ 為了能在計算機上處理漢字,必須把漢字變成二進制數(shù)表示,因為計算機只認識二進制數(shù)。

 ⑵ 要想使?jié)h字變成二進制數(shù),首先應該給每個漢字都編一個唯一的號碼,區(qū)位碼就是給每個漢字編的號碼。區(qū)碼(按行排)和位碼(按列排)的編碼范圍都是十進制數(shù)的1~94,所以,理論上說,區(qū)位碼可以給94^2=8836個漢字編碼。實際上沒有那么多。

 區(qū)位碼用四位十進制數(shù)表示,前兩位是區(qū)碼;后兩位是位碼。如“愛”字的區(qū)位碼是1614D,用16進制數(shù)表示就是100EH。

 ⑶ 因為區(qū)位碼是用四位十進制數(shù)表示的,為了讓計算機也認識,必須把它們轉換為二進制數(shù)字。我國是用兩個標準ASCII碼表示一個漢字的。表示區(qū)碼的稱為高字節(jié);表示位碼的稱位低字節(jié)。但是,已經(jīng)存在的標準ASCII碼中的控制碼是國際通用碼,也是我們需要的,因此,在給漢字編碼時,不能占用。這個控制碼的范圍是從0~31,共32個。為了避開這32個編碼,把每個區(qū)位碼上都加上個數(shù)字“32D”(20H),這樣就把ASCII碼中的32個控制碼碼繞開了。以十六進制表示的區(qū)位碼,加上2020H,就稱為漢字的交換碼。例如,“愛”字的區(qū)位碼是1614D,用十六進制表示是100EH,把它加上2020H后,有100EH+2020H =302EH,這個302EH就是“愛”字的交換碼了。

 ⑷ 漢字的交換碼就可以作為漢字的編碼進行漢字的信息交流了。但是,當在實際使用時,往往是漢字和西文字符混排的,為了不致造成計算機的誤認,所以,又把交換碼高字節(jié)和低字節(jié)中最高的那位(即b7位)都用“ 1”表示,這樣,當程序運行過程中,如果計算機發(fā)現(xiàn)二進制碼的最高位(b7位)是“1”,它就知道是漢字了。因為西文都是用標準ASCII碼編寫的,這種編碼的最高位(b7位)必是“0”,所以計算機憑這個特點就可以漢字和西文區(qū)分開。

 上述的把交換碼的高字節(jié)和低字節(jié)都用“1”表示,就相當于給每個字節(jié)都加上128D(即80H)。交換碼加以8080H后,就變成內(nèi)碼了。例如,“愛”字的交換碼是302EH,302EH+8080H=B0AEH。所以,“愛”字的機內(nèi)碼就是B0AEH。 

41. 區(qū)位碼、交換碼和內(nèi)碼之間怎樣換算?    

   答:交換碼和內(nèi)碼都是由區(qū)位碼派生的,他們之間的關系是:

         交換碼=區(qū)位碼(用16進位制)+2020H

         機內(nèi)碼=交換碼(用16進位制)+8080H=區(qū)位碼(用16進位制)+A0A0H

         數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客     

圖5  區(qū)位碼、交換碼和內(nèi)碼的互換示意圖

   應該特別注意的是:因為一個漢字是用兩個字節(jié)表示的,所以,當把區(qū)位碼轉換為交換碼或?qū)⒔粨Q碼轉換為機內(nèi)碼時,都要把高字節(jié)和低字節(jié)分別進行轉換。例如,將“愛”字的區(qū)位碼轉換為十六制時,應該是用16D=10H和14D=0E,所以,用十六進制表示時,“愛”字的區(qū)位碼是“100EH”,絕對不是“1614D=64EH”。      

 例:“學”字的區(qū)位碼是“4907D”,求其機內(nèi)碼。

    解:區(qū)碼49D=31H;位碼07D=07H,因此,“學”字用16進制數(shù)表示時,其區(qū)位碼是“3107H”。根據(jù)上式可得“學”字的交換碼是3107H+2020H=5127H;機內(nèi)碼就是5127H+8080H=D1A7H。

    這個問題也可以用二進制數(shù)運算,但是比較麻煩:

  ⑴. 因為“學”字的區(qū)位碼是4907D,而49D=00110001B;07D=00000111B,所以,“學”字的二進制編碼是00110001 00000111B。

  ⑵ 若轉換為交換碼,需在每個字節(jié)上加32D,即加00100000,這時有

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

把這兩個計算結果轉換為十六進制就是5127H,即“學”字的交換碼是5127H。

    如果把交換碼再轉換為機內(nèi)碼,則應在每個字節(jié)上加以80H=10000000B,其計算式是:

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

把它們轉換為十六進制就是D1A7H,即“學”字的機內(nèi)碼是D1A7H。

42. Unicode碼和國標碼有什么關系?

答:Unicode 碼和國標碼是不兼容的。例如,“李”字的國標區(qū)位碼十進制數(shù)是“3278”;而Unicode 的十進制編碼是“26446”。 

43. 漢字字符是怎樣輸出的?

答:漢字的輸入、處理和輸出過程,實際上是漢字的各種代碼之間的轉換過程。下圖是這種過程的示意圖。由圖可知,當將輸入碼變換成機內(nèi)碼后,還不能作為漢字直接輸出,只有變成字形碼后才能輸出到顯示屏或打字機去。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

圖6  漢字輸出過程示意圖

  漢字字形編碼是事先存放在漢字庫中的,因為“字庫”的容量太大,它通常是保存在硬盤里。漢字庫的布局是以漢字國標碼的次序前后排列的。所以,在漢字的顯示和打印輸出過程中,文字處理器根據(jù)漢字內(nèi)碼計算出地址碼后,按地址碼從字庫中取出漢字字形碼,才能實現(xiàn)漢字的顯示或打印輸出。

有的漢字打印機,只需送入漢字內(nèi)碼,就可以自行將漢字印出,因為在這種打印機中,漢字內(nèi)碼到字形碼的轉換是由打印機本身完成的。

44. 什么是漢字字形碼?有幾種?

答:漢字字形碼是表示漢字字形的字模數(shù)據(jù),所以,也稱字模碼。漢字的字形碼是為字符的輸出而設定的,所以,又稱其為輸出碼。字形碼有點陣字形碼、矢量函數(shù)字形碼和輪廓字形碼等。

在計算機中都有相應字碼的字庫。目前在計算機中配備的字庫基本上都是輪廓形字庫,點陣形字庫的字已經(jīng)很少了。例如Windows的文件庫中的字型大都是Ture type fonts(TTF)字形,這種字形就是輪廓字形。在每個字體名稱前面注有雙”T”的就是,這種漢字既可作屏幕顯示,又可以作打印輸出。注有紅“A”字的是點陣形字體。在FONTS目錄下,如果字體擴展名為FON,表示該文件為點陣字庫;擴展名為TTF則表示矢量字庫。

45. 什么是點陣字形碼?

答:因為漢字是方塊字,所以,可以將方塊等分成有n行n列的格子來描繪它,我們把這些格子稱為點陣。設筆畫所到的格子點為藍方點(見下圖),用二進制數(shù)“1”表示,否則為白點,用二進制數(shù)“0”表示。這樣,一個漢字的字形就可用一串二進制數(shù)表示了(在圖中沒有列出這個二進制數(shù),因為從圖中就可以很容易地讀出來。只列出了相應的16進制數(shù))。

用點陣表示字形時,漢字字形碼一般指確定漢字字形的這些點陣代碼。隨著漢字字形點陣和格式的不同,漢字字形碼也不同。常用的字形點陣有16×16點陣、24×24點陣、48×48點陣等等。下圖就是“你”字的點陣圖和用16進制數(shù)表示的點陣代碼(字模信息)??梢钥闯?,這是一個16×16的點陣圖。如果用更高的點陣圖,會更清楚些。

數(shù)制和編碼知識50問 - 老頭兒 - 老頭兒的博客

圖7  漢字點陣代碼示意圖

 字模點陣的信息量是很大的,占用存儲空間也很大,以16×16點陣為例,每個漢字占用16×16=256個點陣,即 256bit,因為每8位是一個字節(jié),所以,256bit就是32個字節(jié),也就是說,一個漢字就要占用32個字節(jié)。兩級漢字計有6763個漢字,如此推算起來,為了存儲兩級漢字就要占用大約216KB。如果是48×48點陣形式,每個漢字要占用288個字節(jié),所占用的字節(jié)大約是1MB。太大了。因此,字模點陣只能用 “字庫”來存儲在硬盤上,等需要時再把它從字庫中取出來,而不能用于機內(nèi)存儲。

46. 什么是矢量字形碼?

 答:矢量字形碼的構成與點陣字形碼不同,它們對漢字的處理方法也不同。它是用數(shù)學方法,對漢字進行處理,在每個字的外形取一個個參數(shù),用數(shù)字方法對這些點進行描述,再把各個點用矢量線連接起來,就是該漢字字形的矢量信息。矢量漢字適當放大之后,也不會失真、變形,精度比點陣字要高,但是當矢量漢字大到一定程度時,也會出現(xiàn)連續(xù)的折線,出現(xiàn)棱角,對于專業(yè)出版人員來說,效果并不是特別令人滿意。

47. 什么是輪廓字形碼?

答:曲線輪廓漢字碼,是目前水平最高,也最有前途的漢字庫。這種字體精度最高,效果最好,多級放大也不會產(chǎn)生毛刺、折線、鋸齒,字體最為美觀漂亮。Windows、中文之星等使用的漢字,都是這種曲線輪廓漢字。

曲線輪廓漢字用貝齊爾二次曲線、三次曲線來描述漢字,精密特別高,不管設備如何,分辨率如何,這種字體都能夠高質(zhì)量地進行輸出。True Type漢字吸收了曲線輪廓字形技術的優(yōu)點,是一種高水平的曲線輪廓漢字,有“真正打印漢字”之稱,缺點是輸出之前必須經(jīng)過復雜的數(shù)學運算處理。

48. 什么是漢字地址碼

答:漢字地址碼是指漢字庫(這里主要指整字形的點陣式字模庫)中存儲漢字字形信息的邏輯地址碼。漢字庫中,字形信息都是按一定順序(大多數(shù)按標準漢字交換碼中漢字的排列順序)連續(xù)存放在存儲介質(zhì)上,所以漢字地址碼也大多是連續(xù)有序的,而且與漢字內(nèi)碼間有著簡單的對應關系,這樣就可以簡化漢字內(nèi)碼到漢字地址碼的轉換。

49. 什么是硬字庫?什么是軟字庫?

答:保存在硬盤或軟盤中的字庫稱為軟字庫。將字庫固化在ROM中,稱硬字庫,也稱漢卡,但是,漢卡很少使用。

50. 小測驗題

   ⑴ 1KB等于多少個字節(jié)? (答:1024 B)

    ⑵ 四位二進制數(shù)最多能表示多少個數(shù)?(答:0~15,計16個)

    ⑶ 11011B換算成十進制數(shù)是多少?(手算)(答:27D)

    ⑷ 18D換算成二進制數(shù)是多少?(手算)(答:10010B)

    ⑸ 0.48D換算成十六進制數(shù)是多少?(手算)(答:≈0.7AEH)

    ⑹ 325D換算成十六進制數(shù)是多少?(手算)(答:145D)

    ⑺ 2AH換算成十進制數(shù)是多少?(手算)(答:42D)

    ⑻  1101010B換算成十六進制數(shù)是多少?(手算)(答:6AH)

    ⑼ B2H換算成二進制數(shù)是多少?(手算)(答:178D)

    ⑽ 已知用十六進制數(shù)表示的Unicode編碼是5218H,問這個字符是什么?(不能用查表法求)(答:寫出并選定“5218”,點擊“Alt+X”后,得“劉”字)

    ⑾ 已知用十進制數(shù)表示的Unicode編碼是8594D,問這個字符是什么?(不能用查表法求) (答:按住Alt鍵,在小鍵盤區(qū)鍵入“8594”后,得符號“→”)

    ⑿“他”字的十六進制Unicod碼是多少?(不得查表)(答:在屏幕上鍵入“他”字并選定它后,點擊“Alt+X”,得4ED6,即“他”字的Unicode碼是U+4ED6)

    ⒀ 漢字區(qū)位碼的編碼范圍是什么?(答:是1~94,不是0~94)

    ⒁ 漢字“大”的區(qū)位碼是2083D,求它的交換碼,并用十六進制數(shù)表示。(答:因為20D=14H;83D=53H,所以,用十六進制表示的區(qū)位碼是1453H。其交換碼就是1453H+2020H=3473H)

    ⒂ 漢字“高”的區(qū)位碼是2463D,機內(nèi)碼是什么?(答:24D=18H;63D=3F,用十六進制表示的區(qū)位碼是183FH。所以,“高”字的內(nèi)碼是183FH+A0A0H=B8DFH)

    ⒃ 在24×24點陣的字形碼中,一個漢字占用多少字節(jié)?(答:24×24b÷8b/B=72B)

  附:漢字區(qū)位碼表(已刪,如果網(wǎng)友需要,可以給我發(fā)E-mail)

     

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多