logo

Dopolnitev dveh

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

1010

int 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