Papildkods

Last modified by superadmin on 2018-01-12 20:39

Papildkods

Atmiņas reģistrs vesela skaitļa glabāšanai parasti ir 1, 2, 4 vai 8 baitus liels (tam atbilst Javas datu tipi byte, short, int un long). Tam jāvar glabāt gan pozitīvi, gan negatīvi skaitļi.

Papildkodā pozitīvos skaitļus attēlo, izmantojot to parasto bināro reprezentāciju, bet prasot, lai pirmais (visvecākais) bits būtu nulle (tādējādi, pozitīvie skaitļi un nulle aizņem tikai pusi no visām iespējamajām reģistra vērtībām). Negatīvos skaitļus glabā īpašā veidā, kas iegūts pārveidojot tiem atbilstošos pozitīvos skaitļus. Negatīvā skaitļa papildkodu iegūst, izveidojot pozitīvā skaitļa papildinājumu (visu "0" vietā rakstot "1" un otrādi), un pēc tam rezultātam pieskaitot vieninieku.

  1. Noskaidrojam papildkodā rakstāmā skaitļa zīmi. Ja tas ir pozitīvs, tad papildkods ir vienkārši tā binārais pieraksts (sk. algoritmu decimālu skaitļu pārveidošanai binārā formā). Piemēram, -113 < 0
  2. Negatīviem skaitļiem, pārveidojam šim skaitlim pretējo pozitīvo skaitli binārā formā. Piemēram, 11310 = 011100012
  3. Iegūtajam skaitlim rakstām bitveida negāciju, t.i. aizstājam visus ciparus "0" ar "1" un visus "1" ar "0". Piemēram, ^01110001 = 10001110
  4. Pieskaitām vieninieku rezultātam, lai iegūtu papildkodu. Piemēram, 10001110 + 1 = 10001111. Tātad, skaitļa -11310 pieraksts papildkodā ir 100011112COMP

    Negatīvo skaitļu pārveidošana atpakaļ no papildkoda uz decimālo pierakstu arī iet cauri šīm pašām darbībām vispirms pārmainām visus bitus uz pretējo, pēc tam pieskaitām 1 rezultātam un visbeidzot pārveidojam rezultātu no binārās formas uz decimālo. Piemērs:

  1. Noskaidrojam papildkodā pierakstītā skaitļa zīmi (vai vecākais bits ir "0" vai "1"). Ja skaitlis ir pozitīvs (zīmes bits ir "0"), tad pārveidojam bināro skaitli decimālā formā. Piemēram, 111001012COMP ir negatīvs, jo pirmais bits ir "1"
  2. Rakstām skaitļa bitveida negāciju, t.i. aizstājam visus ciparus "0" ar "1" un visus "1" ar "0". Piemēram, ^11100101 = 00011010
  3. Pieskaitām vieninieku rezultātam. Piemēram, 00011010 + 1 = 00011011
  4. Pārveidojam šo skaitli decimālā formā un pieliekam "-" zīmi. 000110112 = 2710. Tātad, 111001012COMP = -2710

    Papildkoda rēķināšanā ir divi speciāli gadījumi. Ja gribam atrast papildkodu skaitlim "-0", tad iznāk pieskaitīt "1" skaitlim "11111111", kas noved pie reģistra pārplūšanas (pārnesumā rodas cipars "1", kuru nav kur likt) un rezultāts sanāk tāpat "00000000", t.i. -0=0.

    Ja gribam pārveidot papildkodu "10000000" decimālajā sistēmā, tad ievērojam, ka tas ir negatīvs (pirmais cipars ir "1"), t.i. rēķinām papildinājumu, kas ir "01111111" un pieskaitām tam "1". Iegūstam atkal "10000000". Šoreiz tas jāuztver kā binārs pieraksts pozitīvam skaitlim 128. Tātad "10000000" papildkodā vienāds ar negatīvu skaitli -12810. No šejienes var secināt, ka 011111112COMP = 12710 ir lielākais, bet 100000002COMP = -12810 - mazākais skaitlis, kuru var pierakstīt 8 bitu papildkodā.

    Vispārīgi: ja dots n-bitu papildkods, tad ar to var pierakstīt skaitļus no -2<sup>n-1</sup> līdz 2<sup>n-1</sup>-1.

Tags:
Created by Kalvis Apsītis on 2008-05-01 19:30
    
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 6.4 - Documentation