Komputaj kodoj

Tabelo 
                      Ciferecaj sistemoj

    dekume                    duume                          deksesume(h)
      0                       0000       p we                          0
      1                    u   0001                                1
      2                       0010                        9 ga v CA ewb96iuu Ulrich you'll ui        2
      3                       0011                                3
      4                       0100                                4
      5 5 33 898i9g3n3n                      0101                                5
      6                       0110                                6
      7                       0111                    866            7
      8                       1000                                8
      9         8i88              1001i                                9
Ii 11 1011 B
     12           yw            1100                           8ii up     C
     13                       110ip ip ok 7 Oulu okooo ip ioiy I 6i1                 upto I'll opioid up ip p ip opioid 7pm      j          D
     1414 us                        1110                                Es7
     15           k ink i            1111          the 8i I'll oh2 up      j it   in8            Frr2riday night

 Prezento de nombroj 
 Prezento de entjeroj 
La plej malgranda unuo de informo nomiĝas bito. En komputilo, bito povas esti 0 aŭ 1. Komputiloj kutime traktas grupojn da 8 bitoj, kiuj nomiĝas bitokoj, aŭ laŭ la Angla, bajtoj. Bitoko povas enteni nombron inter 0 kaj 255 inkluzive; alivorte, bitoko da informo povas prezenti 256 valorojn. Por prezenti pli grandan nombron, oni bezonas pli da bitokoj.
Tiu prezento kongruas ĉu por nesignitaj nombroj, ĉu por signitaj nombroj, laŭ konvencio.
Por nesignitaj nombroj, la valoro de la nombro estas rekta.
Por prezenti signitajn nombrojn, konvencio estas jena:

- se la plej peza bito de la plej peza bitoko de la nombro estas 0, la koncerna nombro estas pozitiva; la rezulto de tia konvencio estas ke kompute 0 estas pozitiva nombro;

- se la plej peza bito de la plej peza bitoko de la nombro estas 1, la koncerna nombro estas negativa.

Tial la plej peza bito de la plej peza bitoko nomiĝas tiukaze "signobito". La valoro de la nombro estas rekta por pozitivaj nombroj. Por negativaj nombroj, la valoro de la nombro estas la komplemento je du de la rekta valoro. Tiu komplemento kalkuliĝas jene: ĉiuj bitoj estas inversigataj kaj oni adicias unu.

Ekzemple:

- pozitivaj nombroj: 00h = 0; 59h = 89; 7Fh = 127; 7FFFh = 32767

- negativaj nombroj: 80h = -128; A9h = - 87; FFh = -1; 8000h = - 32768

Komputiloj traktas nur duumajn nombrojn. Kontraŭe uzantoj tajpas dekumajn nombrojn, kiuj konsekvence devas tuj esti duumigataj.

 Prezento de reeloj 
Por prezenti reelajn nombrojn, oni uzas la glitpunktan nombroprezenton, t.e. duuman mantison (M) kaj duuman eksponenton (E):

                           N = M * 2^E

Eksponento estas signita entjero. Tamen la uzata konvencio estas inversa de tiu uzata por ordinaraj signitaj entjeroj: la malsupera duono prezentas negativajn valorojn; la supera duono prezentas nulan aŭ pozitivajn valorojn. Do, la eksponento estas en eksceso de sia nesignita mezvaloro, kiu mem prezentas la valoron 0 de la eksponento (2^0 = 1).

Mantiso estas ona, sen signifa cifero maldekstre de la onpunkto (aŭ onkomo), kiu do estas supozata esti tuj maldekstre de la plej peza bito de la plej peza bitoko. Tiu plej peza bito de la plej peza bitoko estas konvencie ĉiam 1. Tial la mantiso estas enmemorigata senŝanĝe, se ĝi estas negativa; se ĝi estas pozitiva, la plej peza bito de la plej peza bitoko estas devigata je 0 antaŭ enmemorigo. Elmemorige la signo de la mantiso estas registrata laŭ la stato de la plej peza bito de la plej peza bitoko, kiu poste estas redevigata je 1. La origina valoro de la mantiso estas do .1 duume, t.e. 2^-1 (0.5 dekume). La rezulto de tia konvencio estas ke la mantiso mem neniam povas valori 0. Tial la nesignita valoro 0 de la eksponento estas destinita por prezenti la valoron 0 de la mantiso: tio klarigas kial la eksponento estas en eksceso de sia nesignita mezvaloro.

Ĉiu pliigo de la eksponento je unu ekvalentas gliton de la onpunkto je unu pozicio dekstren en la mantiso (obligo je 2 de la valoro). Ĉiu malpliigo de la eksponento je unu ekvalentas gliton de la plej peza bito (kies valoro estas ĉiam 1) je unu pozicio dekstren en la mantiso (divido je 2 de la valoro). Ŝanĝo de valoro de la eksponento ja ŝanĝigas nenion fizike en la mantiso: la ĵus menciitaj glitoj estas nur matematikaj ekvalentoj.

 Prezento de tekstoj 
 Tiparaj Normoj 
En dokumento, la numero (aŭ kodo) en bitoko prezentas literon aŭ tipon. Ekzemple, numero 97 prezentas la literon a, 98 prezentas b, ktp. Unu el la fruaj normoj, kiu fariĝis bazo de pli modernaj normoj, estas Askio (nacilingve ASCII - American Standard Code for Information Interchange). Askio difinas tipojn kaj funkciojn por numeroj de 0 ĝis 127. Ĝi enhavas la anglan alfabeton, la ciferojn 0 ĝis 9, kelkajn specialajn tipojn (# $ % ktp.) kaj kelkajn kodojn por regado de presiloj kaj teletajpiloj. Ĝi difinas neniom por kodoj super 127, kaj ne inkluzivas la supersignitajn literojn kiuj necesas al eŭropaj lingvoj.
Ĉar Askio estas tre limigita, la Internacia Norma Instanco, ISO, kreis normojn por la kodoj super 127. Unu de tiuj normoj, eble la plej uzata, estas ISO 8859-1, kiu kutime nomiĝas Latino 1. Latino 1 enhavas supersignitajn literojn kiuj necesas por okcidentaj eŭropaj lingvoj, kiel ekzemple la franca, la germana, la hispana, la norvega, ktp. Sed estas aliaj eŭropaj lingvoj, krom la okcident-eŭropaj. Latino 1 ne havas sufiĉe da kodoj por inkluzivi ilin. Por ili estas aliaj normoj. La tuta gamo estas ISO 8859 1 ĝis 10. Ĉi tiuj estas unu-bitokaj normoj; ĉiu difinas do 256 kodojn. La malsupraj kodoj, 0 ĝis 127, estas identaj kun Askio, kaj la supraj kodoj difinas supersignitajn literojn por diversaj lingvoj. La Esperantaj supersignitaj literoj troviĝas en Latino 3 (ISO 8859-3). Esperantistoj iam uzis ĉi tiun normon por siaj dokumentoj kaj interretaj paĝoj, antaŭ ol Unikodo fariĝis populara.

 Unikodo 
Iuj lingvoj havas tre grandajn nombrojn da tipoj, ekzemple la ĉina, la japana, kaj la korea lingvoj. Ĉar la unu-bitokaj normoj ne kapablas prezenti tiajn lingvojn, oni kreis du-bitokajn normojn. Per du bitokoj, oni povas prezenti 65536 tipojn (256*256 = 65536).
Por aziaj lingvoj, ofte ekzistas pli ol unu populara normo. Ekzemple, Japanoj uzas ĉefe S JIS (Shift Japanese Industrial Standard) en Vindozaj sistemoj, kaj EUC (Extended Unix Code) en Uniksaj sistemoj. Normo por azia lingvo povas teorie prezenti 65536 signojn, sed en praktiko ili difinas malpli ol 10000. La japanaj normoj inkluzivas japanajn silabarojn, ĉinajn ideogramojn, kaj literojn por iuj aliaj lingvoj, sed ne ĉiuj. Per S JIS oni povas prezenti la japanan kaj la anglan en la sama dokumento, sed ne la japanan kaj la araban.
Por solvi la problemojn de multaj kaj koliziantaj signaj normoj, oni evoluigis Unikodon. Unikodo estas nova, du-bitoka internacia normo, kiu difinas kodojn por ĉiuj ĉefaj lingvoj.
Unikodo ne estas perfekta. Ekzemple, ĝi ne difinas kodojn por ĉiuj ĉinaj ideogramoj kiuj iam ajn uziĝis, sed ĝi sufiĉas por ordinaraj ĉinaj tekstoj. Nuntempe, pli kaj pli da sistemoj kaj programoj traktas Unikodon, kaj espereble ĝi malpliigos la ĥaoson de tipaj normoj.
Kelkaj punktoj por memori:

• Askio estas unubitoka normo, kiu difinas kodojn de 0 ĝis 127.

• Latino 1 (ISO 8859 1) estas unubitoka normo, kiu difinas kodojn de 0 ĝis 255. La unuaj kodoj estas identaj kun Askio.

• Unikodo estas dubitoka normo, kiu difinas dekmilojn da kodoj kaj inkluzivas ĉiujn ĉefajn lingvojn. La unuaj 256 kodoj estas identaj kun Latino 1.

 Manieroj prezenti Unikodon (kodoprezentoj) 
Estas pluraj malsamaj manieroj por prezenti Unikodon. Estas grave kompreni la diferencojn.

 UTF-16

La ordinara formo de Unikodo nomiĝas UTF-16 (Unicode Transformation Format -16). La 16 signifas, ke la pliparto de la kodnumeroj havas 16 bitojn (du bitokoj, 2*8 = 16 bitoj).
Diversaj komputiloj tenas nombrojn en memoro malsame. Konsideru la nombron 1077 (deksesume). Oni devas uzi du bitokojn por teni tiun nombron: unu tenas la pli signifan parton (10), kaj la alia tenas la malpli signifan parton (77). Sed la ordo de la bitokoj en memoro dependas de la procesoro de la komputilo. Alivorte, iuj komputiloj kutime skribas 10, 77, kaj aliaj kutime skribas 77, 10. La unua metodo nomiĝas pezkomenca, kaj la dua, pezfina.
Pro ĉi tio, estas du formoj de UTF 16: pezkomenca kaj pezfina. Mikrosofta Vordo uzas pezfinan UTF-16-on. Oni rekomendas pezkomencan UTF-16-on en la Interreto. UTF-16-a dokumento kutime komenciĝas per kodo, kiu indentigas ĝin kiel pezkomencan aŭ pezfinan (bajt-orda markilo).

 UTF-8

UTF-16-a dokumento estas duoble pli granda ol unubitoka dokumento, ekzemple Latino-3-dokumento. Tiuj kiuj havas multajn tekstajn dokumentojn, ne volas duobligi la spacon kiun ili okupas. Tial, la Unikoda Unio kreis kompaktan formon de Unikodo: UTF-8.

En tekstoj de eŭropaj lingvoj. kiuj uzas latinan alfabeton, la pliparto de la literoj ne havas supersignojn. Ekzemple, en ordinara Esperanta teksto, supersignitaj literoj estas nur 2 aŭ 3 elcentoj de la literoj. Oni povas ŝpari multe da spaco, se oni kodas oftajn literojn per nur unu bitoko.
UTF 8 prezentas la samajn kodojn, kiujn UTF 16 prezentas, sed kodas ilin tiel, ke la plej oftaj kodoj, tiuj sub 128, bezonas nur unu bitokon. Kodoj inter 128 kaj 2047 bezonas du bitokojn, kodoj inter 2048 kaj 65535 bezonas tri bitokojn.

La unikodaj kodoj sub 128 estas samaj al Askio. Pro tio, se UTF-8-a dokumento hazarde havas nur latinajn literojn, sen supersignoj, ĝi estas identa kun Askio. Do, UTF 8 estas pli kompakta ol UTF 16, se la teksto estas plejparte latinlitera. Sed UTF-8 estas laŭ spaco malrekomendinda, se la teksto estas japana aŭ ĉina, ĉar ĝi bezonas tri bitokojn por reprezenti tiujn signojn. Tiukaze, UTF-16 estas uzinda.

UTF-8 ne estas subaro de UTF-16. Ĝi prezentas la samajn kodojn, kiujn UTF-16 prezentas. Oni povas konverti dokumenton de UTF-16 al UTF-8, kaj reen, sen perdo de informo.
La 8 en UTF-8 signifas, ke la plej mallongaj kodoj en UTF-8 estas okbitaj (unu bitoko):
Signoj kun numeroj 0 ĝis 127 estas kodataj per unu bitoko kies plej peza bito estas ĉiam 0.
Signoj kun numeroj super 127 estas kodataj per pluraj bitokoj. La plej pezaj bitoj de la unua bitoko estas tiom da 1 kiom da bitokoj necesas por kodi la tipon, sekvataj de 0; la du plej pezaj bitoj de la sekvantaj bitokoj estas 10.

 Intervalo deksesume    UTF-8, duume               Rimarkigo
     00 - 7F          0xxxxxxx            kodoj identaj al Askio;
                                                la bitoko komenciĝas per 0
    80 - 7FF      110xxxxx 10xxxxxx          la unua bitoko komenciĝas
                                                     per 110, la dua per 10
   800 - FFFF   1110xxxx 10xxxxxx 10xxxxxx   la unua bitoko komenciĝas per
                                               1110, la dua kaj tria per 10

En iu UTF-8-signoĉeno estas rimarkinde, ke:

• bitoko kun nula plej peza bito kodas Askian signon unubitoke;

• bitoko kun plej pezaj bitoj 11 estas la unua bitoko de signo kodata per pluraj bitokoj;

• bitoko kun plej pezaj bitoj 10 estas sekvanta bitoko de signo kodata per pluraj bitokoj.

Ekzemple:

     Signo           Deksesume              UTF-8
      A                 41                 01000001
      Ĉ                0108            11000100 10001000
      ĉ                0109            11000100 10001001
      Ĝ                011C            11000100 10011100
      ĝ                011D            11000100 10011101
      Ĥ                0124            11000100 10100100
      ĥ                0125            11000100 10100101
      Ĵ                0134            11000100 10110100
      ĵ                0135            11000100 10110101
      Ŝ                015C            11000101 10011100
      ŝ                015D            11000101 10011101
      Ŭ                016C            11000101 10101100
      ŭ                016D            11000101 10101101
      Ẑ                1E90          11100001 10111010 10010000

Kategorio:Komputilaj datumoj