日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 百眼通 2014-09-29

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

    說明這是本人學(xué)習(xí)電腦的筆記。問題都是我提出來的,答案則完全來自網(wǎng)上。因?yàn)樘峁┵Y料者眾多,不便一一致謝,很是抱歉。

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

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

 

目    錄

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

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

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

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

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

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

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

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

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

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

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

二. 編碼的基本知識(shí) ············· ………………11

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

12. 計(jì)算機(jī)常用的國(guó)際通用編碼有哪些?··········· 11

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

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

15. UCS-2碼和UTF-8是怎樣轉(zhuǎn)換的?············ 12

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

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

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

19. 我國(guó)已經(jīng)頒布的有關(guān)編碼標(biāo)準(zhǔn)有哪些?·········· 14

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

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

22. 什么是“字”?什么是字長(zhǎng)?·············· 16

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

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

25. 請(qǐng)介紹ASCI I碼前32個(gè)碼的含義!············ 18

26. 什么是擴(kuò)展ASCI I碼?················· 18

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

28. 如何把Unicode碼轉(zhuǎn)換為相應(yīng)的字符?·········· 21

29. Unicode碼和ASCII碼是什么關(guān)系?··········· 21

三. 漢字編碼知識(shí)····………………·········· 22

30. 請(qǐng)介紹計(jì)算機(jī)對(duì)漢字信息的處理過程?·········· 22

31. 請(qǐng)介紹處理漢字信息的要點(diǎn)?·············· 22

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

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

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

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

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

37. 什么是漢字的國(guó)標(biāo)碼?················· 25

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

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

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

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

42. Unicode碼和國(guó)標(biāo)碼有什么關(guān)系? ············ 27

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

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

45. 什么是點(diǎn)陣字形碼?·················· 28

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

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

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

49. 什么是硬字庫(kù)?什么是軟字庫(kù)?············· 29

50. 小測(cè)驗(yàn)題······················· 29

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

 

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

一. 數(shù)制知識(shí)

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

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

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

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

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

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

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

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

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

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

以下是幾個(gè)實(shí)例:

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

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

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

答:二進(jìn)制數(shù)的基數(shù)為2,即“逢二進(jìn)一”。它含有兩個(gè)數(shù)字符號(hào):0、1。位權(quán)為2i。

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

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

       ⑴ 加法:0+0=0;1+0=1;0+1=1;1+1=10(逢二進(jìn)一)。如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ù)制和編碼知識(shí)50問 - 老頭兒 - 老頭兒的博客

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

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

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

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

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

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

表3 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制計(jì)算表

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

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

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

    小數(shù)點(diǎn)以后的位權(quán)見下表。

表4 小數(shù)點(diǎn)后的位權(quán)關(guān)系

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

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

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

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

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

或         (10101110.11)B =(256.6)D

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

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

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

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

    這里,以小數(shù)點(diǎn)為界,按四個(gè)二進(jìn)制數(shù)為一組劃分時(shí),小數(shù)點(diǎn)前的高位不足四位時(shí),應(yīng)該在前面加“0”以補(bǔ)足四位;如果在小數(shù)點(diǎn)后的位數(shù)不足四位時(shí),應(yīng)該在數(shù)字的后面加“0”以補(bǔ)足四位。這是應(yīng)該特別注意的。

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

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

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

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

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

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

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

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

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

    例:將八進(jìn)制數(shù)604.05轉(zhuǎn)換成二進(jìn)制數(shù)時(shí),結(jié)果為:

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

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

    ⑵ 八進(jìn)制數(shù)換算為十進(jìn)制數(shù)的方法:用計(jì)算位權(quán)的方法。例如,當(dāng)將八進(jìn)制數(shù)的345.6換算成十進(jìn)制的數(shù)時(shí),結(jié)果為:

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

    例:將十六進(jìn)制數(shù)6F.C轉(zhuǎn)換成二進(jìn)制數(shù)時(shí),結(jié)果為:

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

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

    ⑵ 十六進(jìn)制數(shù)換算為十進(jìn)制數(shù)的方法:用計(jì)算位權(quán)的方法。例如,當(dāng)將十六進(jìn)制數(shù)的A6F.C換算成十進(jìn)制的數(shù)時(shí),結(jié)果為:

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

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

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

     即(A6F)H=2671D 。

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

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


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

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

       答:十進(jìn)制數(shù)換算為二進(jìn)制、八進(jìn)或十六進(jìn)制時(shí),對(duì)于整數(shù)和分?jǐn)?shù)應(yīng)該用不同的方法進(jìn)行轉(zhuǎn)換。介紹如下:

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

    轉(zhuǎn)換結(jié)果是這樣表示的:把各次所得的余數(shù)按逆序排列起來就是所求的結(jié)果了。可簡(jiǎn)記為“除R取余;逆向排序”

例1. 將十進(jìn)制整數(shù)375轉(zhuǎn)換成二進(jìn)制整數(shù)。

解:按“除2取余”法計(jì)算時(shí),運(yùn)算過程見左面的圖示。

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

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

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

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

    例2. 把十進(jìn)制整數(shù)684轉(zhuǎn)換為八進(jìn)制數(shù)。

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

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

應(yīng)提請(qǐng)注意的是:在數(shù)字684   后面的是英文字母o,不是阿拉伯?dāng)?shù)字零。

例3. 把十進(jìn)制數(shù)2671轉(zhuǎn)換為十六進(jìn)制數(shù)

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

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

 

(2)十進(jìn)制小數(shù)轉(zhuǎn)換為其他數(shù)制小數(shù)的方法

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

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

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

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

   

       例2 將十進(jìn)制數(shù)0.75和0.63轉(zhuǎn)換為八進(jìn)制數(shù)

   解:結(jié)果是0.75D = 0.60O;0.63D = 0.5024O。計(jì)算過程如下:

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

 

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

   解:0.75D =0.CH ;0.67D =0.AB8H ,運(yùn)算步驟如下:

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

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

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

 

 二. 編碼的基本知識(shí)

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

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

    在計(jì)算機(jī)中,數(shù)字、符號(hào)、圖形、語音等信息都是用“1”和“0”這兩個(gè)最基本的狀態(tài)符號(hào)來表達(dá)、存儲(chǔ)和傳輸?shù)模驗(yàn)橛?jì)算機(jī)只認(rèn)識(shí)機(jī)器語言,即由“0”和“1”碼組成的語言。

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

12. 計(jì)算機(jī)常用的國(guó)際通用編碼有哪些?

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

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

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

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

    我國(guó)的GB1300標(biāo)準(zhǔn)與ISO/IEC 10646相對(duì)應(yīng),即我國(guó)等同采用ISO/IEC 10646標(biāo)準(zhǔn)。

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

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

13. 什么是Unicode碼?

    答:見上一問。

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

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

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

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

15. UCS-2碼和UTF-8是怎樣轉(zhuǎn)換的?

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

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

表5 UCS-2轉(zhuǎn)換為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ù),所以,應(yīng)該用一個(gè)字節(jié)表示。因?yàn)?6進(jìn)制數(shù)41H用二進(jìn)制數(shù)表示時(shí)是01000001,套用上表的模板,用UTF-8表示時(shí),UTF-8的編碼也是01000001。

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

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

16. 什么是codepage?

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

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

17. 什么是EBCDIC碼?

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

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

18. 什么是BCD碼?

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

  為什么需要BCD碼呢?因?yàn)槿藗冊(cè)谏钪凶钍煜さ挠?jì)數(shù)制是十進(jìn)制,而在計(jì)算機(jī)處理數(shù)據(jù)時(shí)是用二進(jìn)制的,因此,BCD碼的二進(jìn)制數(shù)的形式可以滿足數(shù)字系統(tǒng)的要求;BCD碼的十進(jìn)制的形式,可以適應(yīng)人們的計(jì)數(shù)習(xí)慣。

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

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

十進(jìn)制數(shù)

二進(jìn)制數(shù)

十六進(jìn)制數(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碼跟二進(jìn)制數(shù)在十進(jìn)制數(shù)0~9的范圍內(nèi)是完全對(duì)應(yīng)的。從10以后就不相同了。也就是說BCD碼是由“1001”加1后,直接進(jìn)位為“1 0000”的。之所以出現(xiàn)這種情況,是因?yàn)?421BCD碼的編碼規(guī)定造成的。因?yàn)锽CD碼規(guī)定用二進(jìn)制數(shù)表示十進(jìn)制數(shù)時(shí),不管十進(jìn)制數(shù)的位權(quán)是什么,只要把這個(gè)十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)就可以了。例如,把十進(jìn)制數(shù)“23.5”直接改寫為“0010 0011.0101”就是BCD碼了。

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

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

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

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

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

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

    解:不能求解,因?yàn)椤?011”在8421BCD碼中是非法的。

例4:將二進(jìn)制數(shù)01000111轉(zhuǎn)換為BCD碼。

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

19. 我國(guó)已經(jīng)頒布的有關(guān)編碼標(biāo)準(zhǔn)有哪些?

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

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

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

 GBK向下與GB2312-80編碼兼容,向上支持ISO10646.1國(guó)際標(biāo)準(zhǔn)。共收錄漢字21003個(gè)、符號(hào)883個(gè),并提供1894個(gè)造字碼位,簡(jiǎn)、繁體字融于一庫(kù)。IBM等大公司都支持這個(gè)標(biāo)準(zhǔn)。

⑶ CJK編碼:是包含在ISO/IEC 10646標(biāo)準(zhǔn)的一部分。其中包含了中、日、韓統(tǒng)一的象形文字27484個(gè)。簡(jiǎn)稱CJK字符,即中日韓三國(guó)的字符編碼集。

⑷ GB18030-2000編碼: GB18030-2000編碼標(biāo)準(zhǔn)是在原GB2312-80編碼標(biāo)準(zhǔn)基礎(chǔ)上擴(kuò)展而成的。采用單字節(jié)、 雙字節(jié)和四字節(jié)三種方式編碼,編碼空間達(dá)160多萬個(gè)。基本平面的漢字?jǐn)?shù)達(dá)27533個(gè)。同時(shí)還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字。

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

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

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

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

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

表7  二進(jìn)制數(shù)的位和位權(quán)

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

   

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

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

    答:由于計(jì)算機(jī)使用二進(jìn)制數(shù),2的10次冪(等于十進(jìn)制數(shù)的1024)與十進(jìn)制數(shù)的1000近似,所以,在計(jì)算機(jī)中“千字節(jié)”是按二進(jìn)制數(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é)”,都是千倍關(guān)系。但是,在有些場(chǎng)合(如硬盤商)把1KB當(dāng)作1000B;余依此類推。因此,因?yàn)槭褂梅椒ú煌?,?jīng)常發(fā)生名義字節(jié)和實(shí)測(cè)字節(jié)不一致的情況發(fā)生。

還應(yīng)該提醒的是:在計(jì)量單位的國(guó)家標(biāo)準(zhǔn)中,“ k”是詞頭符號(hào),應(yīng)該用小寫,可是,在計(jì)算機(jī)中,似乎它和兆(M)平起平坐了,都是大寫。

22. 什么是“字”?什么是字長(zhǎng)?

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

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

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

23. 什么是ASCII碼?

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

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

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

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

 

表8  ASCII碼的字符部分

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

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

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

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

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

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

25. 請(qǐng)介紹ASCII碼前32個(gè)控制碼的含義!

    答:可見下表的說明。

表9  ASCII碼的控制碼說明

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

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

26. 什么是擴(kuò)展ASCII碼?

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

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

表10  擴(kuò)展ASCII碼表

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

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

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

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

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

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

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

 

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

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

圖2  計(jì)算器

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

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

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

28. 如何把Unicode編碼轉(zhuǎn)換為相應(yīng)的字符?

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

表11  常用字符的Unicode十進(jìn)制編碼摘錄

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

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

29.  Unicode碼和ASCII碼是什么關(guān)系?

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

三. 漢字編碼知識(shí)

30. 請(qǐng)介紹計(jì)算機(jī)對(duì)漢字信息的處理過程?

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

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

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

圖3   計(jì)算機(jī)對(duì)漢字的處理過程

31. 請(qǐng)概要介紹處理漢字信息的要點(diǎn)

    答:概括地講,用計(jì)算機(jī)處理漢字信息時(shí),需要解決的幾個(gè)問題:

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

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

 (3) 在計(jì)算機(jī)之間怎樣交換漢字信息?(用交換碼,也稱國(guó)標(biāo)碼)

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

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

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

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

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

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

  ⑶ 字形碼(如五筆輸入法),優(yōu)點(diǎn)是重碼少,速度快;缺點(diǎn)是規(guī)則復(fù)雜,記憶困難;適合專業(yè)人員或?qū)τ?jì)算機(jī)使用頻繁的場(chǎng)合;

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

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

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

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

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

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

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

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

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

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

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

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

 答:因?yàn)樵摫硭甲止?jié)太多,不便在這里給出。請(qǐng)參見本文的附件《漢字區(qū)位碼表》。下面給出一些常用符號(hào)的編碼。

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

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

 

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

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

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

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

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

37. 什么是漢字的國(guó)標(biāo)碼?

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

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

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

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

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

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

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

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

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

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

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

    答:簡(jiǎn)述如下:

 ⑴ 為了能在計(jì)算機(jī)上處理漢字,必須把漢字變成二進(jìn)制數(shù)表示,因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)二進(jìn)制數(shù)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  ⑴. 因?yàn)椤皩W(xué)”字的區(qū)位碼是4907D,而49D=00110001B;07D=00000111B,所以,“學(xué)”字的二進(jìn)制編碼是00110001 00000111B。

  ⑵ 若轉(zhuǎn)換為交換碼,需在每個(gè)字節(jié)上加32D,即加00100000,這時(shí)有

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

把這兩個(gè)計(jì)算結(jié)果轉(zhuǎn)換為十六進(jìn)制就是5127H,即“學(xué)”字的交換碼是5127H。

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

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

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

42. Unicode碼和國(guó)標(biāo)碼有什么關(guān)系?

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

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

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

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

圖6  漢字輸出過程示意圖

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

有的漢字打印機(jī),只需送入漢字內(nèi)碼,就可以自行將漢字印出,因?yàn)樵谶@種打印機(jī)中,漢字內(nèi)碼到字形碼的轉(zhuǎn)換是由打印機(jī)本身完成的。

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

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

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

45. 什么是點(diǎn)陣字形碼?

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

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

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

圖7  漢字點(diǎn)陣代碼示意圖

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

46. 什么是矢量字形碼?

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

47. 什么是輪廓字形碼?

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

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

48. 什么是漢字地址碼

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

49. 什么是硬字庫(kù)?什么是軟字庫(kù)?

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

50. 小測(cè)驗(yàn)題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多