Existujú tri rôzne spôsoby vyjadrenia celého čísla (článku) so znamienkom. a: bit so znamienkom, b: doplnok 1 a c: doplnok 2. Pokúsme sa pochopiť, ako sa tieto metódy odvodili a prečo sa uprednostňuje doplnok 2 pred ostatnými.
Ako vieme, dáta sú uložené v bitoch. Ako môžeme uložiť celé číslo so znamienkom do pamäte? Aby sme tento problém vyriešili, najprv vyvinieme naivné riešenie a potom ho budeme opakovať, kým nenájdeme najlepšie riešenie pre náš problém.
a) Podpísaný bit
Pri pokuse o uloženie celého čísla so znamienkom sa zdá byť zrejmé, že sa na znamienko vyhradí najľavejší bit a zvyšné bity sa použijú na skutočné uloženie hodnôt. Napríklad: v 4-bitovom systéme bude prvý bit zľava vyhradený pre znamienko (0 predstavuje kladné, zatiaľ čo 1 predstavuje záporné) a ďalšie 3 bity sa použijú na uloženie hodnôt. Podobne v 8-bitovom systéme sa prvý bit zľava použije na znamienko a zvyšných 7 sa použije na hodnoty.
pán č. | Binárne zobrazenie | Desatinná hodnota |
A | 0000 | +0 |
B | 0001 | +1 |
C | 0010 | +2 |
D | 0011 | +3 |
A | 0100 | +4 |
F | 0101 | +5 |
G | 0110 | +6 |
H | 0111 | +7 |
ja | 1000 | -0 |
J | 1001 | -1 |
K | 1010 | -2 |
L | 1011 | -3 |
M | 1100 | -4 |
N | 1101 | -5 |
O | 1110 | -6 |
P | 1111 | -7 |
Použitím tohto prístupu sme úspešne schopní reprezentovať celé číslo so znamienkom. Ale keď to analyzujeme podrobnejšie, môžeme pozorovať nasledujúce nevýhody:
1) Dve reprezentácie nuly:
V 4-bitovom systéme by sme mali byť schopní uložiť 16 (24) hodnôt, ale +1 až +7 a -1 až -7 je len 14 hodnôt. Kde sú zvyšné dve hodnoty? Keď tabuľku pozorne sledujeme, zistíme, že tieto dve hodnoty konvergujú k 0. Máme teda dve reprezentácie nuly, to znamená jednu reprezentáciu pre +0 a druhú pre -0.
Sú však dve reprezentácie 0 veľkým problémom? No a čo? Namiesto 16 jedinečných hodnôt môžeme uložiť iba 15 hodnôt. Môžeme si dovoliť znížiť rozsah o 1, nie? Pre vývojára softvéru sa to nemusí týkať, ale pre dizajnéra obvodov môže byť veľmi frustrujúce najprv skontrolovať, či je hodnota +0 a potom skontrolovať, či je -0.
2) Podpísané rozšírenie nefunguje pre záporné čísla:
Veľkosť údajov rýchlo rastie. Určitý čas potrebujeme rozšíriť bitový systém, aby sme mohli zväčšiť rozsah dát, ktoré je možné uložiť. V roku 2014 video Gangnam Style prekročilo limit zhliadnutia YouTube a prinútilo YouTube aktualizovať počet zhliadnutí z 32-bitov na 64-bitové celé číslo so znamienkom. Podobne 32-bitové hodiny Unixu pretečú 19. januára 2038, pretože zaznamenávajú čas v sekundách v 32-bitovom celom čísle so znamienkom.
Preto je rovnako dôležité, aby bol náš reprezentačný systém ľahko rozšíriteľný, čo pri tomto reprezentačnom systéme nie je možné.
Desatinné | 4-bitový | 5-bitový | 6-bitový |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1010 | 10 010 (!= 11 010) | 100010 (!= 111010) |
-7 | 1111 | 10111 (!= 11111) | 100111 (!= 111111) |
3) Binárne sčítanie nefunguje:
Skúsme pridať dve binárne čísla:
Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | |||
Číslo 1 | 0010 | +2 | 0111 | +7 | 1101 | -5 | ||
Číslo-2 | 1010 | -2 | 1010 | -2 | 0011 | +3 | ||
Binárne sčítanie | 1100 | -4 | 0001 | +1 | 0000 | +0 | ||
Desatinné sčítanie | +0 | +5 | -2 |
Prečo tu nefunguje jednoduché binárne sčítanie? Dôvodom je, že znamienkový bit (najviac vľavo) nie je obyčajný bit a nie je súčasťou skutočného čísla. Predstavte si situáciu, keď je potrebné navrhnúť hardvérové obvody tak, aby ignorovali znamienkový bit, aby sa vykonalo sčítanie, a potom sa znamienkový bit pripojí.
Takže to bol naivný spôsob, ako reprezentovať celé číslo so znamienkom. Hlavným problémom tohto prístupu je, že záporné čísla sme zmapovali smerom nahor. Ak zmeníme náš systém mapovania tak, aby sa zhora, niektoré z vyššie uvedených problémov sa vyriešia.
b) 1's Co realizovať
Ak premapujeme naše záporné čísla zhora nadol, dostaneme nasledujúcu binárnu tabuľku:
Áno nie. | Binárne zobrazenie | Desatinná hodnota | |
doplnok 1 | Podpísaný bit | ||
A | 0000 | +0 | +0 |
B | 0001 | +1 | +1 |
C | 0010 | +2 | +2 |
D | 0011 | +3 | +3 |
A | 0100 | +4 | +4 |
F | 0101 | +5 | +5 |
G | 0110 | +6 | +6 |
H | 0111 | +7 | +7 |
ja | 1000 | -7 | -0 |
J | 1001 | -6 | -1 |
K | 1010 | -5 | -2 |
L | 1011 | -4 | -3 |
M | 1100 | -3 | -4 |
N | 1101 | -2aplikácie cloud computingu | -5 |
O | 1110 | -1 | -6 |
P | 1111 | -0 | -7 |
Ako získať binárne vyjadrenie celého čísla v metóde doplnku 1?
- Kladné čísla sú reprezentované podobne ako metóda celých čísel so znamienkom
- Záporné čísla sú reprezentované invertovaním každého bitu zodpovedajúceho kladného čísla (invertovanie sa dá ľahko vykonať pomocou brány NOT počas návrhu hardvéru)
Poďme to dôkladne analyzovať, aby sme zistili, či sme dosiahli nejaké zlepšenie.
1) Dve reprezentácie nuly:
Aj v tomto prístupe máme dve reprezentácie nuly.
2) Podpísané rozšírenie nefunguje pre záporné čísla:
Podpísané rozšírenie funguje perfektne pre záporné čísla.
Desatinné | 4-bitový | 5-bitový | 6-bitový |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1101 | 11101 | 111101 |
-7 | 1000 | 11 000 | 111 000 |
3) Binárne sčítanie funguje s upravenými pravidlami:
Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | |||
Číslo 1 | 0010 | +2 | 0111 | +7 | 1010 | -5 | ||
Číslo-2 | 1101 | -2 | 1101 | -2 | 0011 | +3 | ||
Binárne sčítanie | 1111 | -0 | 0100 | +4 | 1101 | -2 | ||
Desatinné sčítanie | +0 | +5 | -2 |
Odpoveď nie je vždy správna, ale je veľmi blízko správnej odpovedi. Môžeme to urobiť, ak budeme dodržiavať pravidlo, že ak ste vygenerovali prenos vpred na svojom najľavejšom bite, nevyhadzujte ho, namiesto toho ho prineste späť a pridajte ho k bitu najviac vpravo.
Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | |||
Číslo 1 | 0111 | +7 | 1110 | -1 | 0111 | +7 | ||
Číslo-2 | 1101 | -2 | 1001 | -6 | 1011 | -4 | ||
Binárne sčítanie | (1) 0100 | +4 | (1) 0111 | +7 | (1) 0010 | +2 | ||
Pridanie prenosu dozadu | 0101 | +5 | 1000 | -7 | 0011 | +3 |
Metóda doplnku 1 je určite lepšia ako bit so znamienkom. Naše hlavné obavy sú vyriešené, ale zostávajú problémom (majú dve reprezentácie nuly) a náš hack v binárnom sčítaní poskytuje vodítka na zlepšenie metódy komplementu 1. Preformulujme si tieto vety, aby to bolo jednoduchšie.
- Máme navyše zastúpenie nuly, čo je zbytočné
- Pri sčítaní dvoch binárnych čísel, ak máme prenos v najväčšom ľavom bite, musíme k výsledku pridať +1, t. j. správnu odpoveď možno nájsť prechodom nadol na ďalší riadok v binárnej tabuľke.
Obaja nás nasmerujú, že extra zastúpenie nuly je hlavnou príčinou problému. Takže odstránime túto nulu navyše a posunieme všetky záporné hodnoty do ďalšieho riadku (-7 sa posunie z I -> J, -6 sa posunie z J -> K atď...)
c) Doplnok 2
Keď odstránime -0 z tabuľky doplnkov 1 a posunieme všetky záporné hodnoty o jeden riadok nižšie, dostaneme nasledujúcu tabuľku, ktorá sa nazýva doplnok 2:
Áno nie. | Binárne zobrazenie | Desatinná hodnota | |||
doplnok 2 | doplnok 1 | Podpísaný bit | |||
A | 0000 | +0 | +0 | +0 | |
B | 0001 | +1 | +1 | +1 | |
C | 0010 | +2 | +2 | +2 | |
D | 0011 | +3 | +3 | +3 | |
A | 0100 | +4 | +4 | +4 | |
F | 0101 | +5 | +5 | +5 | |
G | 0110 | +6 | +6 | +6 | |
H | 0111 | +7 | +7 | +7 | |
ja | 1000 | -8 | -7 | -0 | |
J | 1001 | -7 | = inverzná hodnota 7 + 1 bit | -6 | -1 |
K | 1010 | -6 | = inverzná hodnota 6 + 1 bit | -5 | -2 |
L | 1011 | -5 | = inverzná hodnota 5 + 1 bit | -4 | -3 |
M | 1100 | -4 | = inverzná hodnota 4 + 1 bit | -3 | -4 |
N | 1101 | -3 | = inverzná hodnota 3 + 1-bit | -2 | -5 |
O | 1110 | -2 | = inverzná hodnota 2 + 1 bit | -1 | -6 |
P | 1111 | -1 | = inverzná hodnota 1 + 1-bit | -0 | -7 |
Ako získať binárnu reprezentáciu celého čísla v metóde komplementu 2?
- Kladné čísla sú reprezentované podobne ako metóda celých čísel so znamienkom
- Záporné čísla sú reprezentované invertovaním každého bitu zodpovedajúceho kladného čísla a následným pridaním 1 bitu k nemu
1) Jedno znázornenie nuly:
Teraz máme iba jednu reprezentáciu nuly a to nám umožňuje ukladať celkom 16 jedinečných hodnôt (+0 až +7 a -1 až -8).
2) Rozšírenie so znamienkom funguje pre záporné čísla:
Podpísané rozšírenie funguje perfektne pre záporné čísla.
Desatinné | 4-bitový | 5-bitový | 6-bitový |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1110 | 11110 | 111110 |
-7 | 1001 | 11001 | 111001 |
3) Binárne sčítanie:
Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | ||||
Číslo 1 | 0010 | +2 | 0111 | +7 | 1011 | -5 | 1111 | -1 | |||
Číslo-2 | 1110 | -2 | 1110 | -2 | 0011pridanie reťazca v jazyku Java | +3 | 1010 | -6 | |||
Odpoveď | 0000 | +0 | 0101 | +5 | 1110 | -2 | 1001 | -7 |
4) Prvý bit je bit so znamienkom:
Doplnok 2 má túto peknú vlastnosť, že prvý bit je znamienkový bit, pretože všetky kladné čísla začínajú 0, zatiaľ čo všetky záporné 1.
5) Kontrola pretečenia pamäte:
Pri pridávaní sme sa uistili, že naša odpoveď je v rámci rozsahu, ale pri navrhovaní hardvéru je potrebné zistiť pretečenie pamäte. Pre dizajnérov hardvéru bude veľmi zlý nápad kontrolovať veľkosť, aby zachytili pretečenie. Doplnková metóda 2 poskytuje veľmi jednoduchý spôsob detekcie pretečenia pamäte. ja f prenos do bitu so znamienkom sa nerovná vykonaniu bitu so znamienkom, potom ide o pretečenie pamäte t.j. ak prenos do bitu so znamienkom je 0, ale vykonanie je 1 alebo ak prenos 1, ale uskutočnenie je 0, ide o prípad pretečenia pamäte.
Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | Binárne | Desatinné | ||||
Číslo 1 | 1011 | -5 | 0010 | 2 | 0111 | +7 | 1011 | -5 | |||
Číslo-2 | 1100 | -4 | 0110 | 6 | 1110 | -2 | 0011 | 3 | |||
Doplnenie | (1) 0111 | (0)1000 | (1)0101 | (0)1110 | |||||||
niesť do podpísať bit | 0 | pretečeniu | 1 | pretečeniu | 1 | Nie | 0 | Nie | |||
vykonať podpísať bit | 1 | 0 | 1 | 0 |