(網(wǎng)易博客http://xalq329.blog.163.com 李謙 2008-03-16) 說(shuō)明:這是本人學(xué)習(xí)電腦的筆記。問(wèn)題都是我提出來(lái)的,答案則完全來(lái)自網(wǎng)上。因?yàn)樘峁┵Y料者眾多,不便一一致謝,很是抱歉。 為什么寫(xiě)成問(wèn)答的形式?因?yàn)槟昙o(jì)大了,有些健忘,寫(xiě)成問(wèn)答形式,便于以后查閱。此外,為了加深記憶,對(duì)每一個(gè)問(wèn)題的答案都是根據(jù)自己的理解,用自己的語(yǔ)言進(jìn)行了改寫(xiě),甚至每一個(gè)插圖或圖表都是經(jīng)過(guò)我重新繪制的,絕不照抄照搬,有的地方甚至還有小小的“發(fā)揮”。正因?yàn)檫@樣,這些問(wèn)題的答案肯定有不嚴(yán)密甚至錯(cuò)誤的地方。本來(lái)這是我自己的學(xué)習(xí)筆記,我在網(wǎng)上看到同是“菜鳥(niǎo)”網(wǎng)友求知欲很強(qiáng),我就斗膽地把它發(fā)布在我的博客上,以便與這些網(wǎng)友交流,當(dāng)然,更歡迎“大俠”們指正。 本博客似乎不支持把Word文檔直接粘貼上傳,所以在本問(wèn)答中的圖片都是一個(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)展開(kāi)不同數(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. 如何用鍵盤(pán)輸入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ì)漢字信息的處理過(guò)程?·········· 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問(wèn)》正文 一. 數(shù)制知識(shí) 1. 什么是數(shù)制?常用的數(shù)制有哪些? 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)制)來(lái)表示其前面的數(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語(yǔ)言和另外一些場(chǎng)合,也在十六進(jìn)制的數(shù)碼前面加以“ox”,例如“ox4AD”表示這個(gè)數(shù)是十六進(jìn)制數(shù)4AD。 在表格中或其他場(chǎng)合(如在BIOS中)也經(jīng)常用“D”或“Dec”來(lái)表示十進(jìn)制數(shù);用“B”或“Bin”來(lái)表示二進(jìn)制數(shù);用“Hx”或“Hex”表示十六進(jìn)制數(shù)。 3. 什么是位權(quán)?如何用位權(quán)展開(kāi)不同數(shù)制的數(shù)? 答:任何一個(gè)R進(jìn)制的數(shù)都是由一串?dāng)?shù)碼表示的,其中每一位數(shù)碼所表示的實(shí)際值大小,除數(shù)字本身的數(shù)值外,還與它所處的位置有關(guān)。該位置上的基準(zhǔn)值就稱(chēng)為位權(quán)(或稱(chēng)位值)。位權(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,依此類(lèi)推。 以下是幾個(gè)實(shí)例: 表2 幾種數(shù)制的的位權(quán) 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ù)來(lái)表示電子元件的兩個(gè)穩(wěn)定狀態(tài)“開(kā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(無(wú)意義) 但是,二進(jìn)制的明顯缺點(diǎn)是數(shù)字冗長(zhǎng)、書(shū)寫(xiě)量過(guò)大,容易出錯(cuò)、不便閱讀。所以,在計(jì)算機(jī)技術(shù)文獻(xiàn)的書(shū)寫(xiě)中,常用八進(jìn)制、十進(jìn)制或十六進(jìn)制數(shù)表示。 5. 二進(jìn)制數(shù)如何換算成其他數(shù)制的數(shù)? 答:不同數(shù)制之間的數(shù)值轉(zhuǎn)換時(shí),用計(jì)算機(jī)自帶的計(jì)算器計(jì)算是很方便的。計(jì)算方法見(jiàn)第27題。以下只介紹用手工換算的方法。 把二進(jìn)制數(shù)換算成十進(jìn)制數(shù)時(shí),用位權(quán)展開(kāi)的方法;換算成八進(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í),其解見(jiàn)下表: 表3 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制計(jì)算表 即有(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)見(jiàn)下表。 表4 小數(shù)點(diǎn)后的位權(quán)關(guān)系 第二種方法—逐步累加法。利用“本位累計(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é)果。 ⑵ 二進(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”,寫(xiě)為“010”;在小數(shù)點(diǎn)后的“11”,不足三位,應(yīng)該在后面加“0”,即把“.11”改寫(xiě)為“.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)一”。 還可以表示為(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)展開(kāi)的方法;換算成二進(jìn)位時(shí),是把八進(jìn)制數(shù)直接展開(kāi)成二進(jìn)制數(shù)的方法;換算為十六進(jìn)制數(shù)時(shí),是把八進(jìn)制數(shù)按二進(jìn)制數(shù)展開(kāi)后,再以小數(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é)果為: 或表示為 (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ì)算: 或表示為 (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í)是滿(mǎn)16進(jìn)一,余數(shù)留下;減法時(shí)是借上一位是16,余數(shù)留下。具體方法如下;
⑵ 十六進(jìn)制數(shù)的乘法可以用十進(jìn)制數(shù)的乘法規(guī)則來(lái)計(jì)算,但結(jié)果必須用十六進(jìn)制數(shù)來(lái)表示。 ⑶ 十六進(jìn)制數(shù)的除法可以根據(jù)其乘法和減法規(guī)則處理。 9.十六進(jìn)制數(shù)如何換算成其他數(shù)制的數(shù)? 答:把十六進(jìn)制數(shù)換算成十進(jìn)制數(shù)時(shí),用位權(quán)展開(kāi)的方法;換算成二進(jìn)制數(shù)時(shí),是把十六進(jìn)位數(shù)直接用二進(jìn)位制數(shù)展開(kāi)的方法。如果是轉(zhuǎn)換為八進(jìn)制數(shù),再把這個(gè)二進(jìn)制數(shù)以小數(shù)點(diǎn)為界,以三位為一組劃分開(kāi),然后再轉(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í),當(dāng)把十六進(jìn)制整數(shù)轉(zhuǎn)換為十進(jìn)制整數(shù)時(shí),也可以用逐步累加的方法。思路是:本位的累加數(shù)等于上位累加數(shù)乘16,再加上本位數(shù)。對(duì)上題整數(shù)部分的計(jì)算過(guò)程如下: ⑶ 十六進(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ì)算: 最后這個(gè)表達(dá)式說(shuō)明:表示十六進(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ù)按逆序排列起來(lái)就是所求的結(jié)果了??珊?jiǎn)記為“除R取余;逆向排序” 例1. 將十進(jìn)制整數(shù)375轉(zhuǎn)換成二進(jìn)制整數(shù)。 解:按“除2取余”法計(jì)算時(shí),運(yùn)算過(guò)程見(jiàn)左面的圖示。 右面是用減法計(jì)算時(shí)的步驟,對(duì)二進(jìn)制位權(quán)比較熟悉時(shí),用這個(gè)方法也是可以的。要求根據(jù)被減數(shù)的大小適當(dāng)選擇減數(shù),這個(gè)減數(shù)應(yīng)該是位權(quán)的值,用過(guò)的位權(quán)位是“1”;沒(méi)有用過(guò)的是“0”。 如果你感到用上述連除的方法不方便,也可以用分散除法來(lái)計(jì)算。見(jiàn)下面的計(jì)算步驟: 例2. 把十進(jìn)制整數(shù)684轉(zhuǎn)換為八進(jìn)制數(shù)。 解:按“除八取余”法的計(jì)算過(guò)程如下: 應(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,合起來(lái)得”A6F”,即有2671D = A6FH ,下式就是計(jì)算過(guò)程。
(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é)果是:把取出來(lái)的整數(shù)按正順序排列在小數(shù)點(diǎn)后就行了。具體步驟見(jiàn)下述各例題。 例1. 將十進(jìn)制小數(shù)0.75和0.67轉(zhuǎn)換成二進(jìn)制小數(shù)。 解:其結(jié)果是0.75D=0.11B;0.67D = 101010B。詳見(jiàn)下面的計(jì)算步驟。
例2 將十進(jìn)制數(shù)0.75和0.63轉(zhuǎn)換為八進(jìn)制數(shù) 解:結(jié)果是0.75D = 0.60O;0.63D = 0.5024O。計(jì)算過(guò)程如下:
例3 把十進(jìn)制小數(shù)0.75和0.67換算為十六進(jìn)位制小數(shù) 解:0.75D =0.CH ;0.67D =0.AB8H ,運(yùn)算步驟如下: 如果你感到用連乘法不方便,或者覺(jué)得轉(zhuǎn)換后的有效位數(shù)太少,也可以用分散乘法計(jì)算。步驟如下:
二. 編碼的基本知識(shí) 11. 什么是編碼?什么是字符集? 答:計(jì)算機(jī)的芯片(包括CPU和內(nèi)存條等)是邏輯電子器件,是由億萬(wàn)個(gè)晶體管組成的大規(guī)模集成電路,這些晶體管在高電位時(shí)接通;低電位時(shí)斷開(kāi)。人們正是利用晶體管的這種開(kāi)關(guān)特性進(jìn)行信息交流,并制成了計(jì)算機(jī)。因?yàn)樵谕ㄓ嵓夹g(shù)領(lǐng)域和在電腦技術(shù)中,是把接通定為“1”;把斷開(kāi)定為“0”的。所以,如果電路連續(xù)接通兩次,就是兩個(gè)“1”,即“11”;如果接通兩次后中間斷了一次,而后又接通了,這就是“1101”。如果通訊的雙方共同商議好:什么樣的數(shù)字代表什么意思或代表什么符號(hào),只要由一方發(fā)出一組用“1”和“0”組成的數(shù)碼時(shí),對(duì)方就知道是什么意思或什么符號(hào)了。這就是編碼(Coding)的基本概念。 在計(jì)算機(jī)中,數(shù)字、符號(hào)、圖形、語(yǔ)音等信息都是用“1”和“0”這兩個(gè)最基本的狀態(tài)符號(hào)來(lái)表達(dá)、存儲(chǔ)和傳輸?shù)?,因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)機(jī)器語(yǔ)言,即由“0”和“1”碼組成的語(yǔ)言。 用“0”和“1”這兩個(gè)狀態(tài)符號(hào)做出不同的組合,以表示不同的字符(Character),這就是編碼。例如,在ASCI I編碼中,用“1000001”這種組合表示大寫(xiě)字母“A”; 用“0110001”這種組合表示數(shù)字“1”。把各種狀態(tài)符號(hào)的組合對(duì)應(yīng)的字符匯編起來(lái),就是字符集或符號(hào)集。當(dāng)然如果用二進(jìn)制數(shù)表示編碼,就太麻煩了,因此,編碼大都用十進(jìn)制數(shù)或16進(jìn)制數(shù)表示。 12. 計(jì)算機(jī)常用的國(guó)際通用編碼有哪些? 答:目前最通用的是ASCII碼,它是用來(lái)表示英文字符的一種編碼規(guī)范,是在信息領(lǐng)域中的一種國(guó)際通用的編碼。我國(guó)也不例外。 ASCI I碼是單字節(jié)編碼,每個(gè)字節(jié)由7位二進(jìn)制數(shù)組成,最高位(b7)為“0”。因此,編碼范圍是0~127,即有128個(gè)字位。人們把這種編碼稱(chēng)為基本ASCI I碼或標(biāo)準(zhǔn)ASCI I碼。詳細(xì)情況可參見(jiàn)有管ASCI I編碼的問(wèn)答。 由于基本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),名稱(chēng)是“通用多八位編碼字符集”,編號(hào)是ISO/IEC 10646,目前已經(jīng)是ISO/IEC 10646:2003或以上了。這些組織制定的相應(yīng)編碼方法都是相同的,也是國(guó)際上通用的。不過(guò),人們都叫它為Unicode碼,也稱(chēng)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é)編碼。不過(guò),目前實(shí)際使用的是UCS-2。這種編碼的每個(gè)字符是由16位二進(jìn)制數(shù)表示的。所以,理論上說(shuō),它可以有2^16=65536個(gè)碼位?;旧峡梢院w世界上所有的語(yǔ)言和字符,當(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碼? 答:見(jiàn)上一問(wèn)。 14. 什么是UCS-2碼?什么是UTF-8碼? 答:UCS只是一個(gè)字符集,如果直接用它進(jìn)行傳輸和處理時(shí)就遇到以下問(wèn)題:因?yàn)橛靡粋€(gè)字節(jié)表示的ASCII碼早已廣泛應(yīng)用,UCS-2碼又在標(biāo)準(zhǔn)ASCII碼的基礎(chǔ)上另外增加一個(gè)全部為零的字節(jié),使本來(lái)是一個(gè)字節(jié)的編碼變成了兩個(gè)字節(jié),徒添麻煩,人們感到不方便。更重要的是:在C語(yǔ)言和很多類(lèi)Unix系統(tǒng)里面,一個(gè)字節(jié)的ASCI I碼往往有控制作用,可以做轉(zhuǎn)意字符,在文件或庫(kù)函數(shù)里有特殊的作用,而兩字節(jié)的Unicode碼則無(wú)法應(yīng)用。此外,不同的系統(tǒng)平臺(tái)的設(shè)計(jì)理念不同,對(duì)編碼的要求也不完全一致。例如,同是一個(gè)Unicode編碼U+4E59,蘋(píng)果機(jī)可能認(rèn)為是“奎”字;PC機(jī)則認(rèn)為是“乙”字。為了解決這些問(wè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字符集,但是,在使用中存在以上問(wèn)題。因此,出現(xiàn)了UTF-8,UTF-8的編碼字節(jié)數(shù)則是可變的,理論上說(shuō)它可以用1~6個(gè)字節(jié)表示,這就解決了以上的難題。怎么變呢? 對(duì)基本ASCII碼來(lái)說(shuō), UTF-8用一個(gè)字節(jié)來(lái)表示,即它和基本ASCII碼兼容;對(duì)位于0080H~07FFH范圍內(nèi)的UCS-2編碼,用兩個(gè)字節(jié)表示;對(duì)于漢字來(lái)說(shuō)(在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編碼依序移置過(guò)來(lái)的: 表5 UCS-2轉(zhuǎn)換為UTF-8的模板
例 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寫(xiě)成二進(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ó)的文字編碼,必須有此類(lèi)映射表。簡(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)上卻沒(méi)有采用。在IBM 的System/360計(jì)算機(jī)中,IBM研制了自己的8位字符編碼——EBCDIC碼(Extended Binary Coded Decimal Interchange Co 18. 什么是BCD碼? 答:BCD(Binary Coded Decimal)碼是用二進(jìn)制數(shù)表示十進(jìn)制數(shù)的方法,也就是說(shuō),它是討論怎樣用一種數(shù)制的數(shù)來(lái)表示另一種數(shù)制的數(shù)的方法的,因此,經(jīng)常把BCD碼稱(chēng)為代碼。但是,也經(jīng)常稱(chēng)之為編碼。而本問(wèn)答集所討論的編碼是怎樣把文字符號(hào)用數(shù)字編碼的問(wèn)題。因此,這兩種編碼并不是一回事。也不是本問(wèn)答集的主題。但是,還是需要介紹一下BCD碼。 為什么需要BCD碼呢?因?yàn)槿藗冊(cè)谏钪凶钍煜さ挠?jì)數(shù)制是十進(jìn)制,而在計(jì)算機(jī)處理數(shù)據(jù)時(shí)是用二進(jìn)制的,因此,BCD碼的二進(jìn)制數(shù)的形式可以滿(mǎn)足數(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)系
由此表可以看出,8421BCD碼跟二進(jìn)制數(shù)在十進(jìn)制數(shù)0~9的范圍內(nèi)是完全對(duì)應(yīng)的。從10以后就不相同了。也就是說(shuō)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”直接改寫(xiě)為“0010 0011.0101”就是BCD碼了。 這里所說(shuō)的“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ù)不被采用,稱(chēng)它們是8421BCD碼中非法的數(shù)。這六個(gè)非法數(shù)是1010,1011,1100,1101,1110,1111。 例1:寫(xiě)出十進(jìn)制數(shù)19的BCD碼。 解:由上表知19D=(0001 1001)BCD 例2:寫(xiě)出十進(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碼全稱(chēng)《信息交換用漢字編碼集——基本集》,標(biāo)準(zhǔn)號(hào)為GB2312-80,是中國(guó)國(guó)家標(biāo)準(zhǔn)漢字信息交換用編碼,習(xí)慣上稱(chēng)國(guó)標(biāo)碼,新加坡也使用這一編碼。共有7445個(gè)圖形字符。其中漢字6763個(gè),漢字以外的圖形字符682個(gè)。詳見(jiàn)有關(guān)區(qū)位碼、國(guó)標(biāo)碼的問(wèn)答。 ⑵ GBK編碼(Chinese Internal Specification): GBK(是“國(guó)家標(biāo)準(zhǔn)擴(kuò)展”的意思)全稱(chēng)《漢字內(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)稱(chēng)CJK字符,即中日韓三國(guó)的字符編碼集。 ⑷ GB18030-2000編碼: GB18030-2000編碼標(biāo)準(zhǔn)是在原GB2312-80編碼標(biāo)準(zhǔn)基礎(chǔ)上擴(kuò)展而成的。采用單字節(jié)、 雙字節(jié)和四字節(jié)三種方式編碼,編碼空間達(dá)160多萬(wàn)個(gè)?;酒矫娴臐h字?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è)繁體字編碼方案,俗稱(chēng)“大五碼”。 20. 什么是“位”?什么是“字節(jié)”? 答:二進(jìn)制數(shù)是由“1”和“0”組成的,也就是說(shuō),二進(jìn)制數(shù)中0和1是構(gòu)成二進(jìn)制數(shù)的最小單位,也是計(jì)算機(jī)傳遞信息的最小單位,我們把這個(gè)最小單位稱(chēng)為位(bit),也稱(chēng)比特,符號(hào)為b 。每個(gè)位不是“1”就是“0”,或者說(shuō)“1”占一個(gè)位;“0”也占一個(gè)位。各個(gè)位的名稱(chēng)、位權(quán)和相當(dāng)?shù)氖M(jìn)制數(shù)見(jiàn)下表。 表7 二進(jìn)制數(shù)的位和位權(quán)
在計(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分別稱(chēng)為“千字節(jié)”、“兆字節(jié)”、“ 吉字節(jié)”和“太字節(jié)”,都是千倍關(guān)系。但是,在有些場(chǎng)合(如硬盤(pán)商)把1KB當(dāng)作1000B;余依此類(lèi)推。因此,因?yàn)槭褂梅椒ú煌?,?jīng)常發(fā)生名義字節(jié)和實(shí)測(cè)字節(jié)不一致的情況發(fā)生。 還應(yīng)該提醒的是:在計(jì)量單位的國(guó)家標(biāo)準(zhǔn)中,“ k”是詞頭符號(hào),應(yīng)該用小寫(xiě),可是,在計(jì)算機(jī)中,似乎它和兆(M)平起平坐了,都是大寫(xiě)。 22. 什么是“字”?什么是字長(zhǎng)? 答:字(Word)是計(jì)算機(jī)進(jìn)行信息交換、處理、存儲(chǔ)的基本單元。一條指令或一個(gè)數(shù)據(jù)信息,稱(chēng)為一個(gè)字。也就是說(shuō),字是指計(jì)算機(jī)一次并行處理的一組二進(jìn)制數(shù),它由若干個(gè)字節(jié)組成。 一個(gè)字所包含的位數(shù)稱(chēng)為字長(zhǎng)(Word Length)。字長(zhǎng)不是固定值,跟CPU的型號(hào)有關(guān)。曾經(jīng)有過(guò)8、16和32位之分,目前主流計(jì)算機(jī)都是64位的。當(dāng)我們說(shuō)計(jì)算機(jī)是32位時(shí),就是指的是這臺(tái)計(jì)算機(jī)的CPU的字長(zhǎng)是32位?;蛘哒f(shuō)這臺(tái)計(jì)算機(jī)的CPU能在單位時(shí)間內(nèi)處理字長(zhǎng)為32位(即4個(gè)字節(jié))的二進(jìn)制數(shù)據(jù)。 字長(zhǎng)實(shí)際上是CPU內(nèi)部總線(xiàn)的位寬。字長(zhǎng)與CPU的寄存器數(shù)目有關(guān),但是,不能說(shuō)字長(zhǎng)就是寄存器的數(shù)目。字長(zhǎng)也與CPU內(nèi)部總線(xiàn)有關(guān),但是,不能說(shuō)字長(zhǎng)就是CPU內(nèi)部總線(xiàn)數(shù)?!?/strong> 23. 什么是ASCII碼? 答:ASCI I(American Standard Co ASCI I碼占用一個(gè)字節(jié),即8位(參見(jiàn)上表)。但是,只使用其中b0~b6位,共7位,用于編碼;最高一位(即b7位)是0,可以作為奇偶校驗(yàn)位。這樣一來(lái),可以編碼的數(shù)目就是128個(gè)。編碼范圍用十進(jìn)制數(shù)表示就是0~127,用二進(jìn)制數(shù)表示為00000000B~ 01111111B。這里,在二進(jìn)制數(shù)的數(shù)字后面加上B,表示這是一個(gè)二進(jìn)制數(shù)。“二進(jìn)制”的原文是“Binary”或“Binary System”。 在表格中,經(jīng)常用“Bin”或“B”來(lái)注明這是一個(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è)碼的含義見(jiàn)下一問(wèn)。 雖然標(biāo)準(zhǔn)ASCII碼是7位編碼,但由于計(jì)算機(jī)處理數(shù)據(jù)是以字節(jié)為最小單位的,所以一般仍以一個(gè)字節(jié)來(lái)存放一個(gè)ASCII字符。每一個(gè)字節(jié)中多余出來(lái)的一位(最高位)在計(jì)算機(jī)內(nèi)部通常保持為0。在數(shù)據(jù)傳輸時(shí)可用這一位作奇偶校驗(yàn)位。
表8 ASCII碼的字符部分 24. 如何用鍵盤(pán)輸入ASCII字符?. 答:目前的計(jì)算機(jī)大都支持ASCII碼,所以,當(dāng)你按鍵盤(pán)上的“A”字時(shí),計(jì)算機(jī)接收到的信息就是二進(jìn)制數(shù)碼“0100 1001”,但是,它顯示給你的卻是一個(gè)“A”字。 如果你想用按鍵盤(pán)的方法讓計(jì)算機(jī)顯示出ASCII碼所代表的字符,也是可以的。不過(guò),不能用鍵盤(pán)直接鍵入二進(jìn)制數(shù)碼的方法,因?yàn)槿绻@樣做,就太不方便了,何況計(jì)算機(jī)的設(shè)計(jì)者也沒(méi)有這樣設(shè)計(jì)。怎么辦呢? 因?yàn)閁nicode碼和基本ASCII碼是兼容的,所以,可以利用字符映射表來(lái)輸入ASCII碼的字符。方法是:點(diǎn)擊小鍵盤(pán)區(qū)的“Num Lock”鍵使“Num Lock”綠色顯示燈亮起來(lái)。進(jìn)入小鍵盤(pán)區(qū)后,按住“Alt”鍵,鍵入ASCII碼的十進(jìn)制數(shù)(例如數(shù)字“65”)后,再松開(kāi)“Alt”鍵,“A”字就顯示出來(lái)了。因?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è)控制碼的含義! 答:可見(jiàn)下表的說(shuō)明。 表9 ASCII碼的控制碼說(shuō)明 26. 什么是擴(kuò)展ASCII碼? 答:由于標(biāo)準(zhǔn)ASCII字符集字符是7位代碼,編碼數(shù)目最多為128個(gè),在實(shí)際應(yīng)用中往往無(wú)法滿(mǎn)足要求。為此,國(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ò)充字符的編碼稱(chēng)為擴(kuò)展ASCII碼。在下表中列出了擴(kuò)展ASCII編碼表。在 0128~0255內(nèi)的編碼都屬于這個(gè)范圍。 由于中國(guó)的漢字編碼的機(jī)內(nèi)碼是用兩個(gè)8位的字節(jié)編碼,所以,和擴(kuò)展ASCII碼并不兼容;擴(kuò)展ASCII碼與Unicode碼也不兼容。例如,對(duì)符號(hào)“±”來(lái)說(shuō),擴(kuò)展ASCII碼的十進(jìn)制數(shù)是“241”;Unicode碼的十進(jìn)制數(shù)是“0177”;國(guó)標(biāo)碼的十進(jìn)制數(shù)則是“0132”。 表10 擴(kuò)展ASCII碼表 27. 怎樣查找出任一字符的Unicode碼? 答:在Unicode里,所有的字符被一視同仁。漢字不再使用“兩個(gè)擴(kuò)展ASCII”,而是使用“1個(gè)Unicode碼”,所以,現(xiàn)在的漢字是“一個(gè)字符”了。 要想查出已知字符的Unicode碼,有兩個(gè)方法,較麻煩的方法是用Win XP的字符映射表查,步驟: ①“開(kāi)始”→“全部程序”→“附件”→“系統(tǒng)工具”→“字符映射表”→從顯示出來(lái)的字符映射表中找到你要查的字符(例如“實(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ì)算出來(lái),計(jì)算方法見(jiàn)前面的問(wèn)答。比較方便的是用計(jì)算機(jī)內(nèi)的計(jì)算器計(jì)算,若用計(jì)算器計(jì)算,可見(jiàn)下一步;
② “開(kāi)始”→“全部程序”→“附件”→“計(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”),記住它;
還有一個(gè)簡(jiǎn)單的方法查出字符或文字的16進(jìn)制數(shù)碼,方法是:選中這個(gè)字符(也可以把鼠標(biāo)置于它的右邊)后,按“Alt+X”鍵,這時(shí),這個(gè)符號(hào)就變成了十六進(jìn)制數(shù)了。不過(guò),大前提是在你的屏幕上已經(jīng)有了這個(gè)字符。例如,當(dāng)你將鼠標(biāo)的指針?lè)诺角懊孢@個(gè)“到”字的后面按“Alt+X”鍵時(shí),這個(gè)“到”字就變成“5230”了。當(dāng)你再按一次“Alt+X”鍵時(shí),“到”字又回來(lái)了。 此外,也可以用關(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)入小鍵盤(pán)區(qū),按住“Alt”→鍵入這個(gè)十進(jìn)制號(hào)碼后,松開(kāi)“Alt”鍵,字符就顯示出來(lái)了。下表是若干特殊字符的Unicode十進(jìn)制編碼,供參考。 表11 常用字符的Unicode十進(jìn)制編碼摘錄 最簡(jiǎn)單的方法是直接把這個(gè)十六進(jìn)制數(shù)輸入到Word文檔,并用鼠標(biāo)選中這它,再按“Alt+X”組合鍵,這個(gè)十六制數(shù)就變成符號(hào)了。不過(guò),在上表中給出的是十進(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ì)漢字信息的處理過(guò)程? 答:現(xiàn)代的計(jì)算機(jī)的鍵盤(pán)都是用西洋文字標(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ī)在處理漢字信息的過(guò)程不同,對(duì)編碼的要求和方法也不同。例如,要想讓計(jì)算機(jī)對(duì)漢字進(jìn)行處理,第一步就是把漢字信息輸入到計(jì)算機(jī)中去,這時(shí)需要的是輸入碼(Chinese Character input Co 圖3 計(jì)算機(jī)對(duì)漢字的處理過(guò)程 31. 請(qǐng)概要介紹處理漢字信息的要點(diǎn) 答:概括地講,用計(jì)算機(jī)處理漢字信息時(shí),需要解決的幾個(gè)問(wèn)題: (1) 怎樣將漢字輸入計(jì)算機(jī)?(用漢字輸入編碼,即用外碼) (2) 在計(jì)算機(jī)內(nèi)部怎樣處理漢字?(用機(jī)內(nèi)碼,即內(nèi)碼,也叫處理碼) (3) 在計(jì)算機(jī)之間怎樣交換漢字信息?(用交換碼,也稱(chēng)國(guó)標(biāo)碼) (4) 計(jì)算機(jī)如何實(shí)現(xiàn)漢字信息的輸出?(用圖形碼,或點(diǎn)陣方式或矢量方式或輪括方式)。 此外,還應(yīng)該知道:機(jī)內(nèi)碼和交換碼是由區(qū)位碼派生出來(lái)的;字形碼和內(nèi)碼是一一對(duì)應(yīng)的。不管是什么碼,計(jì)算機(jī)執(zhí)行的都是二進(jìn)制碼。 32, 什么是漢字的輸入碼? 答:漢字輸入碼是為了將漢字通過(guò)鍵盤(pán)輸入計(jì)算機(jī)而設(shè)計(jì)的編碼。輸入碼也稱(chēng)外碼。各種輸入碼有六七百種,但是,歸納為四大類(lèi): ⑴ 數(shù)字編碼(如區(qū)位碼、電報(bào)碼等),也稱(chēng)流水碼,這種編碼方式?jīng)]有重碼,但是,難于記憶和使用; ⑵ 拼音碼(如微軟拼音、紫光拼音等),優(yōu)點(diǎn)是記憶方便,使用簡(jiǎn)單;缺點(diǎn)是重碼多,輸入慢。適合非專(zhuān)業(yè)的計(jì)算機(jī)使用人員; ⑶ 字形碼(如五筆輸入法),優(yōu)點(diǎn)是重碼少,速度快;缺點(diǎn)是規(guī)則復(fù)雜,記憶困難;適合專(zhuān)業(yè)人員或?qū)τ?jì)算機(jī)使用頻繁的場(chǎng)合; ⑷ 音形碼(如智能ABC輸入法)。 雖然各種編碼方法各不相同,但是,對(duì)同一個(gè)字符來(lái)說(shuō),各種編碼方法最終得到的漢字的機(jī)內(nèi)碼必然是相同的。 33. 什么是漢字的區(qū)位碼? 答:根據(jù)我國(guó)的國(guó)家標(biāo)準(zhǔn)GB 2312—80規(guī)定,所有的國(guó)標(biāo)漢字與符號(hào)組成一個(gè)94×94的方陣,在此方陣中,每一行稱(chēng)為一個(gè)“區(qū)” (區(qū)號(hào)為01~94 ),每一列稱(chēng)為一個(gè)“位” (位號(hào)為01~94 ),見(jiàn)下圖。該方陣實(shí)際組成了一個(gè)94×94=8836的保存字符的方格(方格未畫(huà)出),每個(gè)小方格就是一個(gè)字符位。
這個(gè)方格是用區(qū)位碼(Zone Bit Co 漢字在區(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ū)為用戶(hù)自定義漢字區(qū)。由此可知,漢字編碼所占的區(qū)位為72×94=6768,其中有5個(gè)空位。數(shù)字72的由來(lái)是 94-15-(94-87)=72。 34. 怎樣用區(qū)位碼輸入法輸入漢字和字符? 答:在Win XP中有區(qū)位碼輸入法,可以用下述方法把它調(diào)出來(lái):右擊任務(wù)欄系統(tǒng)托盤(pán)區(qū)的輸入法圖標(biāo)→點(diǎn)擊“設(shè)置”→在“文字服務(wù)和輸入語(yǔ)言”窗口選擇“中文(簡(jiǎn)體)內(nèi)碼”→“確定”后,區(qū)位碼輸入法就被調(diào)出來(lái)了。為了便于使用,還可以設(shè)定快捷鍵。 進(jìn)入?yún)^(qū)位碼輸入環(huán)境后,在Word文檔的主鍵盤(pán)區(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)參見(jiàn)本文的附件《漢字區(qū)位碼表》。下面給出一些常用符號(hào)的編碼。 表12 區(qū)位碼符號(hào)摘錄
36. 什么是漢字的交換碼? 答:漢字交換碼(Chines Character Exchange Co 為什么當(dāng)進(jìn)行信息交換時(shí),必須把區(qū)位碼轉(zhuǎn)換為交換碼呢?這是因?yàn)閰^(qū)位碼(Zone Bit Co 因?yàn)锳SCII碼是國(guó)際通用編碼,我們也需要它,所以,漢字編碼必須避開(kāi)這一個(gè)區(qū)域,因此,ISO2022規(guī)定每個(gè)漢字的區(qū)號(hào)和位號(hào)必須分別加上32D(即二進(jìn)制數(shù)00100000B,十六進(jìn)制為20H),經(jīng)過(guò)這樣的處理而得的代碼稱(chēng)為國(guó)標(biāo)交換碼,簡(jiǎn)稱(chēng)交換碼。把高字節(jié)和低字節(jié)都加上“0010000B”后,“愛(ài)”字的交換碼就變成了“00110000B 00101110B”(十進(jìn)制數(shù)分別是48D和46D),從而避免了和標(biāo)準(zhǔn)ASCII碼控制符的沖突。 交換碼通常是用四位16進(jìn)制數(shù)表示的。因?yàn)?8D=30H;46D=2EH,所以“愛(ài)”字交換碼的16進(jìn)制表示為“302EH”。 37. 什么是漢字的國(guó)標(biāo)碼? 答:國(guó)標(biāo)碼(National Stadard Co 38. 什么是漢字的內(nèi)碼? 答:漢字的機(jī)內(nèi)碼簡(jiǎn)稱(chēng)“內(nèi)部碼”或“內(nèi)碼”,它是從交換碼的基礎(chǔ)上演變而來(lái)的。因?yàn)樵谥形奈谋局?,漢字與西文字符經(jīng)常是混合在一起使用的,如果漢字信息不予以特別的標(biāo)識(shí),它與單字節(jié)的標(biāo)準(zhǔn)ASCII碼就會(huì)混淆不清。例如上面所說(shuō)的“愛(ài)”字的國(guó)標(biāo)碼是 “00110000B 00101110B”,它雖然不再跟ASCII碼中的控制碼相沖突,但是,如果漢字和西文混編時(shí),“ 愛(ài)”字的高位碼“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位)漢字編碼就稱(chēng)為GB2312漢字的“機(jī)內(nèi)碼”,又稱(chēng)內(nèi)碼。這樣一來(lái),當(dāng)程序在運(yùn)行過(guò)程中,只要發(fā)現(xiàn)高字節(jié)是數(shù)字“1”,計(jì)算機(jī)就知道這是漢字了。 內(nèi)碼通常是以16進(jìn)制數(shù)表示的。計(jì)算方法可見(jiàn)下一問(wèn)。 39. 什么是漢字的處理碼? 答:漢字的處理碼就是內(nèi)碼,再把上一問(wèn)概括如下: 內(nèi)碼是以漢字的區(qū)位碼為基礎(chǔ)的,是為了適應(yīng)漢字和西文混排而產(chǎn)生的。它的編碼方法是: 內(nèi)碼=(以16進(jìn)位制表示的)區(qū)位碼+A0A0H。 例如,“愛(ài)”字的區(qū)位碼是“1614”,也就是說(shuō)它的區(qū)碼是十進(jìn)制數(shù)16;位碼是十進(jìn)制數(shù)14。把它們轉(zhuǎn)換為16進(jìn)制數(shù)時(shí)分別是“10”和“0E”。這樣,以16進(jìn)制數(shù)表示的“愛(ài)”字的區(qū)位碼就是“100E”。當(dāng)按規(guī)定把這個(gè)16進(jìn)制區(qū)位碼數(shù)加上“A0A0H”時(shí),就變成了“B0AEH”,這個(gè)數(shù)就是“愛(ài)”字的內(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,所以,理論上說(shuō),區(qū)位碼可以給94^2=8836個(gè)漢字編碼。實(shí)際上沒(méi)有那么多。 區(qū)位碼用四位十進(jìn)制數(shù)表示,前兩位是區(qū)碼;后兩位是位碼。如“愛(ài)”字的區(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ū)碼的稱(chēng)為高字節(jié);表示位碼的稱(chēng)位低字節(jié)。但是,已經(jīng)存在的標(biāo)準(zhǔn)ASCII碼中的控制碼是國(guó)際通用碼,也是我們需要的,因此,在給漢字編碼時(shí),不能占用。這個(gè)控制碼的范圍是從0~31,共32個(gè)。為了避開(kāi)這32個(gè)編碼,把每個(gè)區(qū)位碼上都加上個(gè)數(shù)字“32D”(20H),這樣就把ASCII碼中的32個(gè)控制碼碼繞開(kāi)了。以十六進(jìn)制表示的區(qū)位碼,加上2020H,就稱(chēng)為漢字的交換碼。例如,“愛(ài)”字的區(qū)位碼是1614D,用十六進(jìn)制表示是100EH,把它加上2020H后,有100EH+2020H =302EH,這個(gè)302EH就是“愛(ài)”字的交換碼了。 ⑷ 漢字的交換碼就可以作為漢字的編碼進(jìn)行漢字的信息交流了。但是,當(dāng)在實(shí)際使用時(shí),往往是漢字和西文字符混排的,為了不致造成計(jì)算機(jī)的誤認(rèn),所以,又把交換碼高字節(jié)和低字節(jié)中最高的那位(即b7位)都用“ 1”表示,這樣,當(dāng)程序運(yùn)行過(guò)程中,如果計(jì)算機(jī)發(fā)現(xiàn)二進(jìn)制碼的最高位(b7位)是“1”,它就知道是漢字了。因?yàn)槲魑亩际怯脴?biāo)準(zhǔn)ASCII碼編寫(xiě)的,這種編碼的最高位(b7位)必是“0”,所以計(jì)算機(jī)憑這個(gè)特點(diǎn)就可以漢字和西文區(qū)分開(kāi)。 上述的把交換碼的高字節(jié)和低字節(jié)都用“1”表示,就相當(dāng)于給每個(gè)字節(jié)都加上128D(即80H)。交換碼加以8080H后,就變成內(nèi)碼了。例如,“愛(ài)”字的交換碼是302EH,302EH+8080H=B0AEH。所以,“愛(ài)”字的機(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
應(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)換。例如,將“愛(ài)”字的區(qū)位碼轉(zhuǎn)換為十六制時(shí),應(yīng)該是用16D=10H和14D=0E,所以,用十六進(jìn)制表示時(shí),“愛(ài)”字的區(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è)問(wèn)題也可以用二進(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í)有 把這兩個(gè)計(jì)算結(jié)果轉(zhuǎn)換為十六進(jìn)制就是5127H,即“學(xué)”字的交換碼是5127H。 如果把交換碼再轉(zhuǎn)換為機(jī)內(nèi)碼,則應(yīng)在每個(gè)字節(jié)上加以80H=10000000B,其計(jì)算式是: 把它們轉(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. 漢字字符是怎樣輸出的? 答:漢字的輸入、處理和輸出過(guò)程,實(shí)際上是漢字的各種代碼之間的轉(zhuǎn)換過(guò)程。下圖是這種過(guò)程的示意圖。由圖可知,當(dāng)將輸入碼變換成機(jī)內(nèi)碼后,還不能作為漢字直接輸出,只有變成字形碼后才能輸出到顯示屏或打字機(jī)去。
有的漢字打印機(jī),只需送入漢字內(nèi)碼,就可以自行將漢字印出,因?yàn)樵谶@種打印機(jī)中,漢字內(nèi)碼到字形碼的轉(zhuǎn)換是由打印機(jī)本身完成的。 44. 什么是漢字字形碼?有幾種? 答:漢字字形碼是表示漢字字形的字模數(shù)據(jù),所以,也稱(chēng)字模碼。漢字的字形碼是為字符的輸出而設(shè)定的,所以,又稱(chēng)其為輸出碼。字形碼有點(diǎn)陣字形碼、矢量函數(shù)字形碼和輪廓字形碼等。 在計(jì)算機(jī)中都有相應(yīng)字碼的字庫(kù)。目前在計(jì)算機(jī)中配備的字庫(kù)基本上都是輪廓形字庫(kù),點(diǎn)陣形字庫(kù)的字已經(jīng)很少了。例如Windows的文件庫(kù)中的字型大都是Ture type fonts(TTF)字形,這種字形就是輪廓字形。在每個(gè)字體名稱(chēng)前面注有雙”T”的就是,這種漢字既可作屏幕顯示,又可以作打印輸出。注有紅“A”字的是點(diǎn)陣形字體。在FONTS目錄下,如果字體擴(kuò)展名為FON,表示該文件為點(diǎn)陣字庫(kù);擴(kuò)展名為T(mén)TF則表示矢量字庫(kù)。 45. 什么是點(diǎn)陣字形碼? 答:因?yàn)闈h字是方塊字,所以,可以將方塊等分成有n行n列的格子來(lái)描繪它,我們把這些格子稱(chēng)為點(diǎn)陣。設(shè)筆畫(huà)所到的格子點(diǎn)為藍(lán)方點(diǎn)(見(jiàn)下圖),用二進(jìn)制數(shù)“1”表示,否則為白點(diǎn),用二進(jìn)制數(shù)“0”表示。這樣,一個(gè)漢字的字形就可用一串二進(jìn)制數(shù)表示了(在圖中沒(méi)有列出這個(gè)二進(jìn)制數(shù),因?yàn)閺膱D中就可以很容易地讀出來(lái)。只列出了相應(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ì)更清楚些。
46. 什么是矢量字形碼? 答:矢量字形碼的構(gòu)成與點(diǎn)陣字形碼不同,它們對(duì)漢字的處理方法也不同。它是用數(shù)學(xué)方法,對(duì)漢字進(jìn)行處理,在每個(gè)字的外形取一個(gè)個(gè)參數(shù),用數(shù)字方法對(duì)這些點(diǎn)進(jìn)行描述,再把各個(gè)點(diǎn)用矢量線(xiàn)連接起來(lái),就是該漢字字形的矢量信息。矢量漢字適當(dāng)放大之后,也不會(huì)失真、變形,精度比點(diǎn)陣字要高,但是當(dāng)矢量漢字大到一定程度時(shí),也會(huì)出現(xiàn)連續(xù)的折線(xiàn),出現(xiàn)棱角,對(duì)于專(zhuān)業(yè)出版人員來(lái)說(shuō),效果并不是特別令人滿(mǎn)意。 47. 什么是輪廓字形碼? 答:曲線(xiàn)輪廓漢字碼,是目前水平最高,也最有前途的漢字庫(kù)。這種字體精度最高,效果最好,多級(jí)放大也不會(huì)產(chǎn)生毛刺、折線(xiàn)、鋸齒,字體最為美觀漂亮。Windows、中文之星等使用的漢字,都是這種曲線(xiàn)輪廓漢字。 曲線(xiàn)輪廓漢字用貝齊爾二次曲線(xiàn)、三次曲線(xiàn)來(lái)描述漢字,精密特別高,不管設(shè)備如何,分辨率如何,這種字體都能夠高質(zhì)量地進(jìn)行輸出。True Type漢字吸收了曲線(xiàn)輪廓字形技術(shù)的優(yōu)點(diǎn),是一種高水平的曲線(xiàn)輪廓漢字,有“真正打印漢字”之稱(chēng),缺點(diǎn)是輸出之前必須經(jīng)過(guò)復(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ù)? 答:保存在硬盤(pán)或軟盤(pán)中的字庫(kù)稱(chēng)為軟字庫(kù)。將字庫(kù)固化在ROM中,稱(chēng)硬字庫(kù),也稱(chēng)漢卡,但是,漢卡很少使用。 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,問(wèn)這個(gè)字符是什么?(不能用查表法求)(答:寫(xiě)出并選定“5218”,點(diǎn)擊“Alt+X”后,得“劉”字) ⑾ 已知用十進(jìn)制數(shù)表示的Unicode編碼是8594D,問(wèn)這個(gè)字符是什么?(不能用查表法求) (答:按住Alt鍵,在小鍵盤(pán)區(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)
|
|
來(lái)自: 百眼通 > 《02信息的編碼-100》