Aritmetické operácie s použitím dodatočného kódu. Doplnkový kód (reprezentácia čísla)

Hlavný článok: Disjunktívna normálna forma

Jednoduchá spojka  alebo konjunkcia  sa nazýva spojenie nejakej konečnej množiny premenných alebo ich negácií a každá premenná sa vyskytuje nie viac ako raz. Disjunktívna normálna forma  alebo vylučovací normálne forma  nazývané rozdelenie jednoduchých spojov. Elementárne spojenie

    dopravaak každá premenná nie je zahrnutá do nej viac ako jedenkrát (vrátane negácie);

    totálnejak každá premenná (alebo jej negácia) vstúpi presne 1 čas;

    monotónnaak neobsahuje negatívne premenné.

Napríklad - je DNF.

Dokonalá disjunktívna normálna forma  alebo PDNF  v porovnaní s určitou definovanou množinou premenných sa nazýva DNF, pričom každá premenná obsahuje všetky premenné daného súboru, navyše v rovnakom poradí. Napríklad :.

Je jednoduché overiť, či určitý DNF zodpovedá každej Booleovskej funkcii a dokonca aj DNFN pre inú funkciu ako je identická nula. Za týmto účelom stačí nájsť všetky booleovské vektory, ktorých hodnota je 1 v tabuľke pravdy tejto funkcie, a pre každý takýto vektor konštruovať spojenie Kde. Rozpojenie týchto spojení je PDNF pôvodnej funkcie, pretože na všetkých boolovských vektoroch sa jej hodnoty zhodujú s hodnotami pôvodnej funkcie. Napríklad, implicitne, výsledkom je, že môžete zjednodušiť až.

[Spojenie potrebných] spojovacia normálna forma (knf)

Hlavný článok: Spojovacia normálna forma

Konjunktívny normálny tvar1  (CNF) sa určuje dvojitým metódou DNF. Jednoduché rozdelenie  alebo doložka  rozdelenie jednej alebo viacerých premenných alebo ich negácií sa nazýva a každá premenná sa do nej nevkladá viac ako raz. CNF je spojenie jednoduchých disjunkcií.

Dokonalá konjunktívna normálna forma (SKNF), pokiaľ ide o určitú definovanú množinu premenných, sa nazýva CNF, v ktorom sú všetky premenné daného súboru zahrnuté do každej disjunkcie a v rovnakom poradí. Keďže (C) CNF a (C) DNF sú navzájom dvojité, vlastnosti (C) CNF opakujú všetky vlastnosti (C) DNF, zhruba povedané, "presne naopak".

CNF môže byť premenená na jej ekvivalent DNF otvorením zátvoriek podľa pravidla:

ktorý vyjadruje distributivitu spojenia vzhľadom na disjunkciu. Potom je potrebné odstrániť opakované premenné alebo ich negácie v každej spojke a tiež odstrániť z rozdelenia všetky spojky, v ktorých sa premenná vyskytuje spolu s jej negatívom. V tomto prípade nemusí byť výsledok PDNF nevyhnutne, aj keby pôvodný CNF bol CNF. Podobne môžete vždy ísť z DNF na CNF. Ak to chcete urobiť, použite pravidlo

vyjadrujúce distributivitu disjunkcie vzhľadom na spojenie. Výsledok musí byť prevedený vyššie opísaným spôsobom, pričom slovo "spojenie" sa nahradí "disjunkciou" a naopak.

16 Zákony transformácie logických výrazov: jednopárové prvky, negácie.

V algebri logiky existujú zákony, ktoré sú napísané vo forme vzťahov. Logické zákony umožňujú ekvivalentné transformácie logických výrazov. Transformácie sa nazývajú ekvivalentné, ak skutočné hodnoty originálu a získané po transformácii logickej funkcie sú rovnaké pre všetky hodnoty logických premenných, ktoré sú v nich obsiahnuté.

Pre jednoduchosť uvádzame základné zákony algebra logiky pre dve logické premenné. a V.Tieto zákony platia pre iné logické premenné.

1. Zákon protirečenia:

2. Zákon vylúčeného stredného:

3. Zákon dvojitej negácie:

4. Zákony de Morgan:

5. Zákony opakovania: A & A = A; A v A = A; B & B = B; B v B = B.

6. Zákony o absorpcii:   (A & B) = A; A & (A  B) = A.

7. Zákony vylúčenia konštánt:   1 = 1;  0 = A; A & 1 = A; A & 0 = 0; B  1 = 1; B  0 = B; B & 1 = B; B & 0 = 0.

8. Zákony lepenia:

9. Záväzný zákon: (A  B) = (B  A).

Pre logické premenné platia aj všeobecné matematické zákony. Pre jednoduchosť uvádzame všeobecné matematické zákony pre tri logické premenné. A, B a C:

1. Commutative právo: A & B = B & A;  B = b  A.

2. Asociačné právo: A & (B & C) = (A & B) & C;  (B  C) = (A  B)  C.

3. Distribučné právo: A & (B  C) = (A & B)  (A & C).

Ako už bolo uvedené, pomocou zákonov algebry logiky môžeme vytvoriť ekvivalentné transformácie logických výrazov, aby sme ich zjednodušili. V algebri logiky sú založené na dohode nasledovné pravidlá (priority) pre vykonávanie logických operácií: operácie sa vykonávajú najskôr v zátvorkách, potom v nasledujúcom poradí: inverzia (negácia), spojka (&), disjunkcia (v), implikácia (⇒) (⇔)

Vykonajte konverziu, napríklad logickú funkciu

uplatnenie príslušných zákonov algebry logiky.

17 Zákony transformácie logických výrazov: kombinované zákony.

Zákony formálnej logiky

Najjednoduchšie a najdôležitejšie pravé spojenia medzi myšlienkami sú vyjadrené v základných zákonoch formálnej logiky. Také sú zákony identity, bez rozporu, vylúčené tretie, dostatočný dôvod.

Tieto zákony sú zásadné, pretože v logike zohrávajú mimoriadne dôležitú úlohu, sú najbežnejšie. Umožňujú nám zjednodušiť logické výrazy a vytvárať závery a dôkazy. Prvé tri z vyššie uvedených zákonov boli identifikované a formulované Aristotelom a zákon dostatočného dôvodu - G. Leibniz.

Zákon totožnosti: v procese istého zdôvodnenia musí byť každý koncept a úsudok totožný s ním.

Zákon neporovnania: je nemožné, aby ten istý bol súčasne a nie je v tom istom vzťahu inherentný. To znamená, že nie je možné niečo povedať a poprieť súčasne.

Zákon vylúčeného stredu: z dvoch protichodných súdom je pravda, druhá je falošná a tretia nie je daná.

Zákon má dostatočný dôvod: každé pravé myslenie musí byť dostatočne odôvodnené.

Posledný zákon hovorí, že dôkaz o niečom znamená dôkaz presných a jediných pravdivých myšlienok. Falošné myšlienky nemožno dokázať. Existuje dobré latinské príslovie: "Chytiť je charakteristické pre každého človeka, ale trvať na tom, že chyba je charakteristická len bláznom." Vzorec tohto zákona nie je, pretože má len zmysluplný charakter. Ako argumenty potvrdzujúce skutočnú myšlienku možno použiť skutočné úsudky, faktografický materiál, štatistiku, vedecké zákony, axiómy, preukázané vety.

Zákony algebry viet

Algebra výkazov (algebra logiky) je odvetvie matematickej logiky, ktorá skúma logické operácie na výkazoch a pravidlá pre transformáciu komplexných vyhlásení.

Pri riešení mnohých logických problémov je často potrebné zjednodušiť vzorce získané formalizáciou ich podmienok. Zjednodušenie vzorcov v algebri výkazov sa robí na základe ekvivalentných transformácií založených na základných logických zákonoch.

Zákony algebry výrokov (algebra logiky) sú tautológie.

Niekedy sa tieto zákony nazývajú vety.

V algebri vyhlásení sú logické zákony vyjadrené ako rovnosť rovnocenných vzorcov. Medzi zákonmi vystupujú tak, že obsahujú jednu premennú.

Prvými štyrmi zákonmi uvedenými nižšie sú základné zákony algebry vyhlásení.

Zákon totožnosti:

Každý koncept a úsudok je totožný s ním.

Zákon totožnosti znamená, že v procese uvažovania nie je možné nahradiť jednu myšlienku za inú, jednu koncepciu za druhú. Ak je tento zákon porušený, sú možné logické chyby.

Napríklad úvahy Správne hovoria, že jazyk prinesie do Kyjeva, a včera som si kúpil údený jazyk, takže teraz môžem bezpečne ísť do Kyjevapretože prvé a druhé slovo "jazyk" označujú rôzne koncepty.

V argumentu: Pohyb navždy. Škola je hnutie. Preto ísť do školy navždyslovo "pohyb" sa používa v dvoch rôznych zmysloch (prvý - vo filozofickom zmysle - ako atribút hmoty, druhý - v bežnom slova zmysle - ako akcia pre pohyb v priestore), čo vedie k falošnému záveru.

Zákon nezlučiteľnosti:

Rozsudok a jeho negácia nemôžu byť pravdivé v tom istom čase. To znamená, že vyhlásenie - pravda, jeho popieranie nie amusí byť nepravdivé (a naopak). Potom bude ich práca vždy falošná.

18 Minimalizácia analytického záznamu logických funkcií: metóda mapy Carnot.

Karno Map  - grafický spôsob, ako minimalizovať spínacie (booleovské) funkcie, ktoré poskytujú relatívnu jednoduchosť práce s veľkými výrazmi a eliminujú potenciálne preteky.

Ďalší kód záporného čísla možno získať obrátením modulu binárneho čísla (prvé pridanie) a pridaním jedného k inverzii (druhý prídavok) alebo odpočítaním čísla od nuly.

Doplnkový kód (navyše k 2) binárneho čísla sa získa pridaním 1 k najmenej významnej číslici jeho pridania k 1.

Binárne 8-bitové číslo so znakom  v dodatočnom kóde môže predstavovať akékoľvek celé číslo v rozsahu od -128 do +127. Ak je predná číslica nula, potom najväčšie celé číslo, ktoré možno zapísať do zostávajúcich 7 číslic, je    2 7 - 1 (\\ displaystyle 2 ^ (7) -1)to znamená 127.

desatinný
idea
Binárne zobrazenie (8 bitov)
rovno spiatočný dodatočný
127 01111111 01111111 01111111
1 00000001 00000001 00000001
0 00000000 00000000 00000000
-0 10000000 11111111 ---
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-3 10000011 11111100 11111101
-4 10000100 11111011 11111100
-5 10000101 11111010 11111011
-6 10000110 11111001 11111010
-7 10000111 11111000 11111001
-8 10001000 11110111 11111000
-9 10001001 11110110 11110111
-10 10001010 11110101 11110110
-11 10001011 11110100 11110101
-127 11111111 10000000 10000001
-128 --- --- 10000000

Doplnkový kód pre desiatkové čísla

Rovnaký princíp sa môže použiť aj v počítačovej reprezentácii desatinných čísel: pre každú číslicu sa číslica X nahrádza číslicou 9 - X a výsledné číslo sa pridáva 1. Napríklad pri použití štvorčíslového čísla -0081 sa nahradí číslom 9919 (9919 + 0081 = 0000, vyvrhnuté).

Pri aplikácii rovnakej myšlienky na bežný 10-bitový číselný systém sa ukáže (napríklad pre hypotetický procesor používajúci 10-bitový číselný systém):

10. číselný systém
  ("normálny" vstup)
10. číselný systém
  doplnkový kód
... ...
13 0013
12 0012
11 0011
10 0010
9 0009
8 0008
... ...
2 0002
1 0001
0 0000
-1 9999
-2 9998
-3 9997
-4 9996
... ...
-9 9991
-10 9990
-11 9989
-12 9988
... ...

Konverzia na ďalší kód

Konverzia čísla z priameho kódu na ďalší sa uskutočňuje podľa nasledujúceho algoritmu.

  1. Ak je číslo napísané v priamom kóde pozitívne, pridá sa k nemu vedúca (znaková) číslica rovnajúca sa 0 a konverzia končí;
  2. Ak je číslo zapísané v priamom kóde záporné, všetky číslice čísla sú obrátené a k výsledku je pridaná 1. Najvýznamnejšia číslica (1) sa pridáva do výsledného čísla.

Príklad. Transformujeme záporné číslo -5 zapísané do priameho kódu do ďalšieho. Priamy kód číslo -5 prijaté modulo:

  reverzný kód:

Pridať k výsledku 1

Pridajte znamienko jednu číslicu doľava.

Pre inverznú transformáciu sa používa ten istý algoritmus. Ide o:

Prevrátime všetky číslice čísla, a tak získame reverzný kód:

Pridať k výsledku 1

A skontrolujte a pridajte ďalší kód

0101 + 1011 = 10000, piata číslica je hodená.

p-adických čísel

V systéme p-adické čísla menia označenie čísla konverziou čísla na jeho dodatočný kód. Napríklad, ak sa používa číselný systém s 5 notáciami, číslo oproti 1000 ... (1) je 4444 .... (-1).

Implementácia algoritmu na konverziu na doplnkový kód (pre 8-bitové čísla)

pascal

Ak a< 0 then a := ((not a ) or 128 ) + 1 ;

C / C ++

Int konvertovať (int a) (ak (a< 0 ) a = ( ~- a | 128 ) + 1 ; return a ; }

Výhody a nevýhody

výhody

  • Všeobecné pokyny (procesor) pre pridanie, odčítanie a ľavý posun pre podpísané a nepodpísané čísla (rozdiely iba v aritmetických príznakoch, ktoré je potrebné skontrolovať na kontrolu pretečenia vo výsledku).
  • Neprítomnosť čísla "mínus nula".

nedostatky

  • Reprezentácia záporného čísla nie je čitateľná obvyklými pravidlami, pretože pre jeho vnímanie potrebujete špeciálnu zručnosť alebo výpočet
  • V niektorých reprezentáciách (napríklad v binárnom desatinnom kóde) alebo v ich častiach (napríklad mantissa s číslom s pohyblivou čiarou) je dodatočné kódovanie nepríjemné
  • Modul najväčšieho počtu sa nerovná modulu najmenšieho počtu. Napríklad pre osembitové celé číslo so znamienkom maximálny počet: 127 10 = 01111111 2, minimálny počet: -128 10 = 10000000 2. V dôsledku toho opak nie je pravdivý pre žiadne číslo. Operácia zmeny znamienok môže vyžadovať ďalšie overenie.

Na určenie znamienka čísla v binárnom kóde sa používajú 0 a 1. S nulou je kód "+" kódovaný, jednotka je kódovaná znakom "-".

Pre reprezentáciu pozitívnych a záporných čísel v počítačoch sa používajú DIRECT, REVERSE a ADDITIONAL kódy.

Pozitívne čísla  v dopredných, reverzných a ďalších kódech sa zobrazujú rovnakým spôsobom - binárne kódy s číslicou 0 v znamienkovom bite. Napríklad:

Záporné čísla  priamy, reverzný a doplnkový kód majú iný obraz.

1. Priamy kód, Číslica 1 sa umiestni do znakovej značky a binárny kód jej absolútnej hodnoty sa umiestni do číslic digitálnej časti čísla. Napríklad:

2. Reverzný kód, Ukazuje sa tým, že sa obrátia všetky číslice binárneho kódu absolútnej hodnoty čísla, vrátane čísla znaku: nuly sú nahradené týmito hodnotami a nuly nulami. Napríklad:

3. Doplnkový kód, Ukázalo sa, že vznikol návratový kód s následným pridaním jedného do jeho mladšej kategórie. Napríklad:

Zvyčajne sa pri zadávaní do stroja automaticky zapisujú záporné desatinné čísla do opačného alebo dodatočného binárneho kódu a sú uložené, presúvané a zapojené do operácií v tejto forme. Pri odvodení takýchto čísel z auta, reverzná konverzia na záporné desatinné čísla.

príklad:  Predložte číslo +7, -12, -15, -16 v priamom, opačnom a doplnkovom kóde.

Pri prekladaní od zadnej strany v priamej  kód sa deje inverzia čísel.

Pri prekladaní z priameho kódu  je 1) inverzia číslic čísel, 2)+1 je pridaný  na nízke poradie obráteného čísla.

Aritmetické operácie na podpísaných číslach

Vo väčšine počítačov sa odpočítavanie nepoužíva. Namiesto toho sa pridávanie inverzných alebo dodatočných kódov znižuje a odpočítava. To vám umožní výrazne zjednodušiť dizajn ALU.

Pridávanie reverzných kódov .   Pri pridávaní čísel A a B existujú štyri hlavné a dva špeciálne prípady:

Algebraické pridanie

Ak sa výsledok dosiahne znamienkom mínus (s hodnotou "1"), potom výsledok je potrebné   konvertovať na priamy kód !!!

1. A a B sú pozitívne.  V súčte sú pridané všetky číslice vrátane číslice znaku. Keďže znamienkové znaky pozitívnych výrazov sú nulové, číslica znamienka sumy je tiež nula. Napríklad:

Dosiahli ste správny výsledok.

2. A je pozitívny, B je negatívny a absolútny je väčší ako A.  | A |< |B|

Napríklad:

Ak je výsledok získaný s znamienkom mínus s hodnotou "1", výsledok musí byť premenený na priamy kód !!!

Správny výsledok sa získa v opačnom kóde. Pri preklade do priameho kódu sú bity digitálnej časti výsledku obrátené: 1 0000111 = -7 10.

3. A je pozitívny, B je záporný av absolútnej hodnote je menej ako A.  | A | \u003e B |

Napríklad:


Počítač opraví pôvodne získaný nesprávny výsledok (6 namiesto 7) prevod jednotky  od podpisovej hodnosti až po nízku objednávku.

4. A a B sú negatívne.  Napríklad:


Počiatočný nesprávny výsledok počítača (inverzný kód čísla -11 10 namiesto inverzného kódu čísla -10 10) sa koriguje prenesením jednotky zo znakového bitu na dolnú číslicu sumy. Pri preklade výsledku do priameho kódu sú bity digitálnej časti čísla obrátené: 1 0001010 = -10 10.

Pri pridávaní môže nastať situácia, keď horné bity výsledku operácie nezapadajú do pamäťovej oblasti pridelenej pre túto operáciu. Táto situácia sa nazýva pretečenie číslicovej siete číselného formátu.  Špeciálne nástroje sa používajú na detekciu pretečenia a upozorňovanie na chybu v počítači. Nižšie sú uvedené dva možné prípady pretečenia.

5. A a B sú pozitívne, súčet A + B je väčší alebo rovný 2 n-1 ,   kde n je počet číslic formátu čísla (pre formát jedného bajtu, n = 8, 2 n-1 = 27 = 128). Možnosť pretečenia.

Napríklad:


Sedem číslic digitálnej časti formátu čísel nestačí  aby bolo možné prijať osemmiestny súčet (162 10 = 10100010 2) vysoký bit súčtu je v bitke znamienka.  To spôsobuje nesúlad sumárneho znaku a podmienok podmienokže je dôkazom pretečenia bitov.

Princípy binárneho kódovania sú začlenené do princípov fungovania počítačov: všetky údaje sú reprezentované ako binárne čísla, ktoré sú kódované nejakým spôsobom. Kódy binárnych čísel sú potrebné na vykonávanie logických a aritmetických operácií s údajmi.

V článku "Číselné systémy" sme považovali iba pozitívne čísla. Pri písaní podpísaných binárnych čísel vo svojom formáte je potrebné uviesť dve polia: pole definujúce znak čísla a pole charakterizujúce modul o čísle. Špeciálny bit znamienka (binárny bit) je vyhradený pre označenie čísla. Zvyšné číslice určujú modul počtu. Znakový bit je priradený na ľavej strane modulu čísla s označením "+" zodpovedajúcim nulovej hodnote znakového bitu a znaku "-".

V histórii vývoja počítačov sa použili tri hlavné možnosti reprezentácie znakov:

  • priamy kód alebo znak a hodnota;
  • reverzný kód alebo kód s pridaním k jednému;
  • doplnkový kód alebo kód s pridaním dvoch.

Vo všetkých troch kódech pozitívne čísla vyzerajú rovnako. Rozdiely vo forme písania záporných čísel naopak a ďalšie kódy sa týkajú iba spôsobu, akým modul predstavuje číslo a metóda kódovania a umiestnenie znakového bitu zostávajú nezmenené.

Priamy binárny číselný kód

V systéme priamej reprezentácie kódov sa číslo skladá zo znakového kódu a modulu čísla, pričom oba sú spracované samostatne.

Príklady priameho kódu pre správne frakcie:

Príklady priameho kódu pre celé čísla:

Zobrazenie čísel v priamom kóde má významnú nevýhodu - formálne sumovanie čísel s rôznymi znakmi dáva nesprávny výsledok. Príkladom je pridanie dvoch čísel a. V priamom kóde majú tieto čísla formu: a. Je zrejmé, že výsledok by mal byť -2, čo v priamom kóde môže byť napísané ako 1.010. Súčasne s priamym prírastkom dostaneme

tj hodnota, ktorá sa výrazne líši od očakávanej hodnoty.

Postup pre správne pridanie čísel do priameho kódu existuje, ale je to veľmi ťažkopádne. Priamy kód má ďalšiu nevýhodu - nula má dve rôzne reprezentácie, a to matematicky nemá zmysel.

Z dôvodu zaznamenaných nedostatkov v počítačoch nie je použitý priamy kód, ale reverzné a dodatočné kódy.

V týchto kódovacích systémoch zostáva umiestnenie znakového bitu a metóda kódovania rovnaké ako pri priamom kódovaní. Signálny bit sa však už nepovažuje za samostatný, ale považuje sa za neoddeliteľnú súčasť čísla, podobne ako číslice modulu čísel a spolu s nimi.

Reverzný binárny číselný kód

Pre záporné binárne čísla je postup pre získanie inverzného kódu nasledovný: jednotka je zapísaná do znakového bitu a v číslach priameho kódu sa jednotka nahradí nulami a nulami s jedným.

Príklady návratového kódu pre správne zlomky:

.

Príklady reverzného kódu pre celé čísla:

.

Je jednoduché vidieť, že pozitívne čísla v kóde dopredu a v reverznej podobe vyzerajú rovnako.

Aj keď inverzný kód nám umožňuje vyriešiť problém pri pridávaní a odpočítaní čísel s rôznymi znakmi, má tiež nevýhody. Po prvé, proces sumárneho čísla je dvojstupňový proces, ktorý zvyšuje dobu vykonania tejto operácie. Po druhé, ako v priamom kóde, naopak - dve reprezentácie nula: a.

Ďalšie binárne číselné kódy

Doplnkový kód záporného binárneho čísla sa vytvorí podľa nasledujúceho pravidla: v digitálnych číslach priameho kódu sú jednotky nahradené nulami a nulami, po ktorých sa jeden pridáva k nižšiemu poradovému číslu.

Zvážte napríklad číslo Xktorý má priamy kód vo forme:

Potom môže byť opačný kód napísaný ako

.

Pre ďalší kód pridajte 1 do nižšieho poradia spätného kódu:

.

Príklady doplnkového kódu pre správne frakcie:

.

Príklady doplnkového kódu pre celé čísla:

.

Pozitívne čísla v doplnkovom kóde sú napísané rovnakým spôsobom ako v priamom. Pri zastupovaní čísel v doplnkovom kóde existuje iba jedna forma zápisu nula: 0.0 ... 00 a nula je považovaná za kladné číslo, pretože jeho znakový bit je 0.

Vo väčšine počítačov sú záporné čísla uvedené v dodatočnom kóde.

Pridanie a odčítanie čísel naopak a dodatočných kódov

Odčítanie sa vykonáva ako pripočítanie čísel, z ktorých jedna je so záporným znamienkom.

Pri vykonávaní algebraického pridávania sa číslice a číslice modulu považujú za celok a spracovávajú sa spolu. Prevod z vyššej (podpísanej) číslice naopak a ďalších kódov sa zohľadňuje rôznymi spôsobmi. V prípade inverzného kódu sa prenosová jednotka zo znakového bitu pridáva k čiastke nízkeho poriadku. Keď sa použije ďalší kód, prenosová jednotka sa vyhodí zo znakového bitu.

Príklad 1  Pridajte čísla   a

Pri použití reverzného kódu získame:

Pri použití doplnkového kódu získame:

Ak je znaková značka výsledku nula, znamená to, že je prijaté pozitívne číslo, ktoré vyzerá rovnako ako v priamom kóde. Jednotka v bitke znamienka znamená, že výsledok je negatívny a jeho vstup zodpovedá zobrazeniu v kóde, v ktorom bola operácia vykonaná.


Esej na tému:

Doplnkový kód (reprezentácia čísla)



plán:

      úvod
  • 1 Zobrazenie čísla v dodatočnom kóde
  • 2 Konverzia doplnkového kódu
  • 3 Doplnkový kód pre desiatkové čísla
  • 4 Implementácia algoritmu na konverziu na inverzný kód (pre 8-bitové čísla)
    • 4.1 Pascal
    • 4.2 C / C ++
  • 5 Výhody a nevýhody
    • 5.1 Výhody
    • 5.2 Nevýhody
  • 6 Príklad prevodu softvéru
    • 6.1 C # .NET / C štýl

úvod

Doplnkový kód  (Angl. dva doplnkyniekedy dvojky-komplement) - Najbežnejší spôsob, ako reprezentovať záporné celé čísla v počítačoch. Umožňuje vám nahradiť operáciu odpočítania operáciou pridania a vykonať operácie pridania a odčítania rovnaké pre podpísané a nepodpísané čísla, čo zjednodušuje architektúru počítača. Ďalší kód záporného čísla možno získať obrátením modulu binárneho čísla (prvé pridanie) a pridaním jedného k inverzii (druhé pridanie). Alebo odpočítaním čísla od nuly.

Doplnkový kód (navyše k 2) binárneho čísla sa získa pridaním 1 k najmenej významnej číslici jeho pridania k 1.

Prídavok k 2 binárnym číslam je definovaný ako hodnota získaná odpočítaním čísla z najväčšieho stupňa dvoch (od 2 N pre N-bitový prídavok k 2).


  1. Zastupovanie čísla v dodatočnom kóde

Pri písaní čísla v dodatočnom kóde je vysoký poradie významný. Ak je jeho hodnota 0, potom zostávajúce číslice obsahujú kladné binárne číslo, ktoré zodpovedá priamemu kódu. Ak je znamienkový bit 1, potom zostávajúce číslice obsahujú záporné binárne číslo prevedené na ďalší kód. Ak chcete získať hodnotu, ktorá je opačná v znamení, všetky číslice, vrátane znaku, sú obrátené a potom sa pridáva k výsledku.

Binárne 8-bitové číslo so znakom  v dodatočnom kóde môže predstavovať akékoľvek celé číslo v rozsahu od -128 do +127. Ak je bit s vysokým poradím nulový, potom najväčšie celé číslo, ktoré možno zapísať v zostávajúcich 7 číslicach, je 2 7 - 1, čo je 127.

desatinný
idea
Kód binárneho zastúpenia (8 bitov)
rovno dodatočný
127 01111111 01111111
1 00000001 00000001
0 00000000 00000000
-0 10000000 --------
-1 10000001 11111111
-2 10000010 11111110
-3 10000011 11111101
-4 10000100 11111100
-5 10000101 11111011
-6 10000110 11111010
-7 10000111 11111001
-8 10001000 11111000
-9 10001001 11110111
-10 10001010 11110110
-11 10001011 11110101
-127 11111111 10000001
-128 -------- 10000000

Pri aplikácii rovnakej myšlienky na zvyčajný desiatkový číselný systém sa ukáže (napríklad pre hypotetický procesor s použitím desiatkového číselného systému):

10-ročný číselný systém
  ("normálny" vstup)
10-ročný číselný systém
  doplnkový kód
... ...
13 0013
12 0012
11 0011
10 0010
9 0009
8 0008
... ...
2 0002
1 0001
0 0000
-1 9999
-2 9998
-3 9997
-4 9996
... ...
-9 9991
-10 9990
-11 9989
-12 9988
... ...

  2. Konverzia dodatočného kódu

Konverzia čísla z priameho kódu na ďalší sa uskutočňuje podľa nasledujúceho algoritmu.

  1. Ak je číslo napísané v priamom kóde pozitívne, pridá sa k nemu vedúca (znaková) číslica rovnajúca sa 0 a konverzia končí;
  2. Ak je číslo zapísané v priamom kóde záporné, všetky číslice čísla sú obrátené a do výsledku sa pridá 1.

Príklad. Transformujeme záporné číslo -5 zapísané do priameho kódu do ďalšieho. Priamy kód číslo -5 prijaté modulo:

Pridať k výsledku 1

Pridajte znamienko jednu číslicu doľava.

Pre inverznú transformáciu sa používa ten istý algoritmus. Ide o:

Prevrátime všetky číslice čísla, a tak získame reverzný kód:

Pridajte do výsledku 1 a skontrolujte a pridajte ďalší kód

0101 + 1011 = 10000, piata číslica je hodená.

  3. Doplnkový kód pre desiatkové čísla

Rovnaký princíp sa môže použiť aj v počítačovej reprezentácii desatinných čísel: pre každú číslicu sa číslica X nahrádza číslicou 9 - X a výsledné číslo sa pridáva 1. Napríklad pri použití štvorčíslového čísla -0081 sa nahradí číslom 9919 (9919 + 0081 = 0000, vyvrhnuté).

  4. Implementácia algoritmu na konverziu na inverzný kód (pre 8-bitové čísla)

  4.1. pascal

Ak a<0 then a:= ((not a) or 128 ) + 1 ;

  4.2. C / C ++

Ak (a< 0 ) a = ( (~a) | 128 ) + 1 ;

  5. Výhody a nevýhody

  5.1. výhody

  • Rovnaký register môže byť uložený ako n-bit pozitívne číslo a ( n-1) je číslo podpísaného bitu, spoločné pre oba formáty operácie pridania, odčítania a posunu doľava.
  • Vhodnejšie balenie čísel v bitových poliach.
  • Neprítomnosť čísla "mínus nula".

  5.2. nedostatky

  • Ďalší kód nie je zrejmé pre začiatočníkov.
  • V zložitých formátoch (ako je napríklad kód s pohyblivou alebo binárnou desatinnou čiarkou) väčšina výhod je zrušená.
  • Modul najväčšieho počtu sa nerovná modulu najmenšieho počtu. Príklad: podpísané celé číslo s 8 bajtami. Maximálny počet: 127 10 == 7F 16 == 01111111 2. Minimálny počet: -128 10 == 80 16, doplnkový kód == 10000000 2, doplnkový kód. V dôsledku toho opak nie je pravdivý pre žiadne číslo. Operácia zmeny znamienok môže vyžadovať ďalšie overenie.

  6. Príklad konverzie softvéru

Ak sa údaje čítajú zo súboru alebo z oblasti pamäte, kde sú uložené v binárnom dodatočnom kóde (napríklad súbor WAVE), môže byť potrebné konvertovať bajty. Ak sú dáta uložené v 8 bitoch, je potrebné, aby hodnoty 128-255 boli negatívne.

  6.1. C # .NET / C štýl

Byte b1 = 254; // 11111110 (binárny) bajt b2 = 121; // 01111001 (binárny) byte c = 1<< (sizeof (byte ) * 8 - 1 ) ; // 2 sa zvýši na hodnotu 7. Výsledok: 10 000 000 (binárne)  bajt konverzie = (c ^ b1) - c; // Výsledok: -2. A v skutočnosti binárny doplnkový kód.  byte b2 Konverzia = (c ^ b2) - c; Výsledok zostáva 121, pretože bit znamenia je nulový.


Táto eseje je založená na
Náhodné články

hore