Predznačeno celo število (člen) lahko predstavimo na tri različne načine. a: bit s predznakom, b: komplement 1 in c: komplement 2. Poskusimo razumeti, kako so te metode nastale in zakaj je dopolnilo 2 prednost pred drugimi.
Kot vemo, so podatki shranjeni v bitih. Kako lahko v pomnilnik shranimo celo število s predznakom? Da bi rešili ta problem, bomo najprej razvili naivno rešitev in jo nato ponavljali, dokler ne bomo dobili najboljše rešitve za naš problem.
a) Bit s predznakom
Ko poskušate shraniti celo število s predznakom, se zdi očitno, da rezervirate skrajni levi bit za znak in uporabite preostale bite za dejansko shranjevanje vrednosti. Na primer: v 4-bitnem sistemu bo prvi bit od leve rezerviran za predznak (0 predstavlja pozitivno, medtem ko 1 predstavlja negativno), ostali 3 biti pa bodo uporabljeni za shranjevanje vrednosti. Podobno v 8-bitnem sistemu bo prvi bit z leve uporabljen za znak, preostalih 7 pa za vrednosti.
gospod št. | Binarna predstavitev | Decimalna vrednost |
A | 0000 | +0 |
B | 0001 | +1 |
C | 0010 | +2 |
D | 0011 | +3 |
IN | 0100 | +4 |
F | 0101 | +5 |
G | 0110 | +6 |
H | 0111 | +7 |
jaz | 1000 | -0 |
J | 1001 | -1 |
K | 1010 | -2 |
L | 1011 | -3 |
M | 1100 | -4 |
n | 1101 | -5 |
O | 1110 | -6 |
p | 1111 | -7 |
Z uporabo tega pristopa lahko uspešno predstavljamo celo število s predznakom. Ko pa to podrobneje analiziramo, lahko opazimo naslednje pomanjkljivosti:
1) Dve predstavitvi ničle:
V 4-bitnem sistemu bi morali biti sposobni shraniti 16 (24) vrednosti, vendar je od +1 do +7 in od -1 do -7 samo 14 vrednosti. Kje sta ostali dve vrednosti? Ko natančno opazujemo tabelo, bomo ugotovili, da ti dve vrednosti konvergirata k 0. Tako imamo dve predstavitvi ničle, to pomeni, da ena predstavitev za +0 in druga za -0.
Toda ali sta dve predstavitvi 0 velika skrb? Pa kaj? Namesto 16 edinstvenih vrednosti lahko shranimo le 15 vrednosti. Lahko si privoščimo zmanjšanje obsega za 1, kajne? Za razvijalca programske opreme to morda ne skrbi, za načrtovalca vezja pa bi lahko bilo zelo frustrirajuće, da najprej preveri, ali je vrednost +0 in nato preveri, ali je -0.
2) Podpisana razširitev ne deluje za negativna števila:
Velikost podatkov se hitro povečuje. Nekaj časa moramo razširiti bitni sistem, da lahko povečamo obseg podatkov, ki jih je mogoče shraniti. Leta 2014 je videoposnetek Gangnam Style presegel YouTubovo omejitev ogledov in YouTube je moral nadgraditi število ogledov z 32-bitnega na 64-bitno celo število s predznakom. Podobno se bo 32-bitna ura Unixa 19. januarja 2038 prelila, ker beleži čas v sekundah v 32-bitnem celem številu s predznakom.
Zato je enako pomembno, da je naš sistem zastopanja enostavno razširljiv, kar s tem sistemom zastopanja ni mogoče.
decimalno | 4-bitni | 5-bitni | 6-bitni |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1010 | 10010 (!= 11010) | 100010 (!= 111010) |
-7 | 1111 | 10111 (!= 11111) | 100111 (!= 111111) |
3) Binarno seštevanje ne deluje:
Poskusimo sešteti dve binarni števili:
Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | |||
Številka 1 | 0010 | +2 | 0111 | +7 | 1101 | -5 | ||
Številka-2 | 1010 | -2 | 1010 | -2 | 0011 | +3 | ||
Binarno seštevanje | 1100 | -4 | 0001 | +1 | 0000 | +0 | ||
Decimalni seštevek | +0 | +5 | -2 |
Zakaj preprosto binarno seštevanje tukaj ne deluje? Razlog je v tem, da bit predznaka (skrajno levo) ni navaden bit in ni del dejanskega števila. Predstavljajte si situacijo, ko je treba zasnovati strojno vezje tako, da ignorira predznakovni bit za izvedbo seštevanja in nato doda predznakovni bit.
Torej je bil to naiven način za predstavitev celega števila s predznakom. Glavna težava pri tem pristopu je, da smo negativna števila preslikali navzdol navzgor. Če spremenimo naš sistem preslikave tako, da jih od zgoraj navzdol, bodo nekatere od zgornjih težav odpravljene.
b) 1's Co izvajati
Če naša negativna števila preslikamo od zgoraj navzdol, bomo dobili naslednjo binarno tabelo:
da ne | Binarna predstavitev | Decimalna vrednost | |
1 je dopolnilo | Podpisani bit | ||
A | 0000 | +0 | +0 |
B | 0001 | +1 | +1 |
C | 0010 | +2 | +2 |
D | 0011 | +3 | +3 |
IN | 0100 | +4 | +4 |
F | 0101 | +5 | +5 |
G | 0110 | +6 | +6 |
H | 0111 | +7 | +7 |
jaz | 1000 | -7 | -0 |
J | 1001 | -6 | -1 |
K | 1010 | -5 | -2 |
L | 1011 | -4 | -3 |
M | 1100 | -3 | -4 |
n | 1101 | -2 | -5 |
O | 1110 | -1 | -6 |
p | 1111 | -0 | -7 |
Kako pridobiti binarno predstavitev celega števila v metodi komplementa 1?
- Pozitivna števila so predstavljena podobno kot metoda predznačenih celih števil
- Negativna števila so predstavljena z obračanjem vsakega bita ustreznega pozitivnega števila (obračanje je mogoče enostavno izvesti z uporabo vrat NOT med načrtovanjem strojne opreme)
To natančno analizirajmo, da vidimo, ali smo dosegli nekaj izboljšav.
1) Dve predstavitvi ničle:
Pri tem pristopu imamo tudi dve predstavitvi ničle.
2) Podpisana razširitev ne deluje za negativna števila:
Podpisana razširitev deluje odlično za negativna števila.
decimalno | 4-bitni | 5-bitni | 6-bitni |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1101 | 11101 | 111101 |
-7 | 1000 | 11000 | 111000 |
3) Binarno seštevanje deluje s spremenjenimi pravili:
Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | |||
Številka 1 | 0010 | +2 | 0111 | +7 | 1010 | -5 | ||
Številka-2 | 1101 | -2 | 1101 | -2 | 0011 | +3 | ||
Binarno seštevanje | 1111 | -0 | 0100 | +4 | 1101 | -2 | ||
Decimalni seštevek | +0 | +5 | -2 |
Odgovor ni vedno pravilen, je pa zelo blizu pravilnemu odgovoru. To lahko dosežemo, če upoštevamo pravilo, da če ste ustvarili prenos naprej na skrajnem levem delu, ga ne zavrzite, temveč ga vrnite nazaj in dodajte skrajno na desno.
Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | |||
Številka 1 | 0111 | +7 | 1110 | -1 | 0111 | +7 | ||
Številka-2 | 1101 | -2 | 1001 | -6 | 1011 | -4 | ||
Binarno seštevanje | (1) 0100 | +4 | (1) 0111 | +7 | (1) 0010 | +2 | ||
Dodajanje prenosa naprej nazaj | 0101 | +5 | 1000 | -7 | 0011 | +3 |
Definitivno je metoda komplementa 1 boljša od bita s predznakom. Naši glavni pomisleki so odpravljeni, vendar ostaja težava (dve predstavitvi ničle) in naš vdor v binarno seštevanje daje namige za izboljšanje metode komplementa 1. Preoblikujemo te stavke, da bo lažje.
- Imamo dodatno predstavitev ničle, ki je nepotrebna
- Pri seštevanju dveh binarnih števil, če imamo prenos naprej v skrajnem levem bitu, moramo rezultatu dodati +1, tj. pravi odgovor je mogoče najti tako, da se pomaknete navzdol do naslednje vrstice v binarni tabeli.
Oba nas usmerjata, da je dodatna predstavitev ničle glavni vzrok težave. Torej, odstranimo to dodatno ničlo in prestavimo vse negativne vrednosti v naslednjo vrstico (-7 se bo premaknilo iz I -> J, -6 se bo premaknilo iz J -> K in tako naprej ...)
c) Komplement 2
Ko odstranimo -0 iz tabele komplementa 1 in premaknemo vse negativne vrednosti eno vrstico nižje, bomo dobili naslednjo tabelo, ki se imenuje komplement 2:
da ne | Binarna predstavitev | Decimalna vrednost | |||
2 dopolnilo | 1 je dopolnilo | Podpisani bit | |||
A | 0000 | +0 | +0 | +0 | |
B | 0001 | +1 | +1 | +1 | |
C | 0010 | +2 | +2 | +2 | |
D | 0011 | +3 | +3 | +3 | |
IN | 0100 | +4 | +4 | +4 | |
F | 0101 | +5 | +5 | +5 | |
G | 0110 | +6 | +6 | +6 | |
H | 0111 | +7 | +7 | +7 | |
jaz | 1000 | -8 | -7 | -0 | |
J | 1001 | -7 | = obratno od 7 + 1-bit | -6 | -1 |
K | 1010 | -6 | = obratno od 6 + 1-bit | -5 | -2 |
L | 1011 | -5 | = obratno od 5 + 1-bit | -4 | -3 |
M | 1100 | -4 | = obratno od 4 + 1-bit | -3 | -4 |
n | 1101 | -3 | = obratno od 3 + 1-bit | -2 | -5 |
O | 1110 | -2 | = obratno od 2 + 1-bit | -1 | -6 |
p | 1111 | -1 | = obratno od 1 + 1-bit | -0 | -7 |
Kako pridobiti binarno predstavitev celega števila v metodi komplementa 2?
- Pozitivna števila so predstavljena podobno kot metoda predznačenih celih števil
- Negativna števila so predstavljena tako, da se vsak bit ustreznega pozitivnega števila obrne in mu nato doda 1 bit
1) Ena predstavitev ničle:
Zdaj imamo samo eno predstavitev ničle in nam omogoča shranjevanje skupaj 16 edinstvenih vrednosti (+0 do +7 in -1 do -8).
2) Podpisana razširitev deluje za negativna števila:
Podpisana razširitev deluje odlično za negativna števila.
decimalno | 4-bitni | 5-bitni | 6-bitni |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1110 | 11110 | 111110 |
-7 | 1001 | 11001 | 111001 |
3) Binarno seštevanje:
Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | ||||
Številka 1 | 0010 | +2 | 0111 | +7 | 1011 | -5 | 1111 | -1 | |||
Številka-2 | 1110 | -2 | 1110 | -2 | 0011 | +3 | 1010int v niz v Javi | -6 | |||
Odgovori | 0000 | +0 | 0101 | +5 | 1110 | -2 | 1001 | -7 |
4) Prvi bit je bit s predznakom:
Komplement 2 ima to lepo lastnost, da je prvi bit bit predznaka, ker se vsi pozitivni začnejo z 0, vsi negativni pa z 1.
5) Preverjanje prekoračitve pomnilnika:
Med seštevanjem smo se prepričali, da je naš odgovor znotraj obsega, vendar je treba med načrtovanjem strojne opreme zaznati prelivanje pomnilnika. Za oblikovalce strojne opreme bo zelo slaba ideja, da preverijo velikost, da ujamejo prelivanje. Metoda komplementa 2 ponuja zelo preprost način za odkrivanje prelivanja pomnilnika. jaz Če prenos v predpisani bit ni enak prenosu predznačenega bita, potem gre za prepolnitev pomnilnika tj., če je prenos v predpisani bit 0, izvedba pa 1 ali če je prenos 1, vendar izvedba 0, potem gre za prepolnitev pomnilnika.
Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | Binarno | decimalno | ||||
Številka 1 | 1011 | -5 | 0010 | 2 | 0111 | +7 | 1011 | -5 | |||
Številka-2 | 1100 | -4 | 0110 | 6 | 1110 | -2 | 0011 | 3 | |||
Dodatek | (1) 0111 | (0)1000 | (1)0101 | (0)1110 | |||||||
nosi v znak bit | 0 | preliv | 1 | preliv | 1 | št | 0 | št | |||
izvesti za podpis bit | 1 | 0 | 1 | 0 |