logo

To's komplement

Der er tre forskellige måder at repræsentere signeret heltal (artikel) på. a: Signeret bit, b: 1's komplement og c: 2's komplement. Lad os prøve at forstå, hvordan disse metoder er udledt, og hvorfor 2's komplement foretrækkes frem for andre.

Som vi ved, lagres data i bits. Hvordan kan vi gemme signeret heltal i hukommelsen? For at løse dette problem vil vi først udvikle en naiv løsning og derefter gentage den, indtil vi har den bedste løsning på vores problem.



a) Signeret bit

Når du forsøger at gemme et signeret heltal, virker det oplagt at reservere den venstre bit til fortegn og bruge resterende bits til faktisk at gemme værdierne. For eksempel: i 4-bit system vil den første bit fra venstre være reserveret til fortegn (0 repræsenterer positiv, mens 1 repræsenterer negativ), og andre 3 bits vil blive brugt til at gemme værdierne. På samme måde i 8-bit system, vil den første bit fra venstre blive brugt til fortegn, og de resterende 7 vil blive brugt til værdier.

Mr. Nej.

Binær repræsentation



Decimalværdi

EN

0000



+0

B

0001

+1

C

0010

+2

D

0011

+3

OG

0100

+4

F

0101

+5

G

0110

+6

H

0111

+7

jeg

1000

-0

J

minimax algoritme
1001

-1

K

1010

-2

L

1011

-3

M

1100

-4

N

1101

-5

O

1110

-6

P

1111

-7

Ved at bruge denne tilgang er vi med succes i stand til at repræsentere signeret heltal. Men når vi analyserer det nærmere, kan vi observere følgende ulemper:

1) To repræsentationer af nul:

I 4-bit system burde vi være i stand til at gemme 16 (24) værdier, men +1 til +7 og -1 til -7 er kun 14 værdier. Hvor er de resterende to værdier? Når vi observerer tabellen omhyggeligt, vil vi finde ud af, at disse to værdier konvergerer til 0. Vi har således to repræsentationer af nul, det vil sige en repræsentation for +0 og en anden for -0.

Men er to repræsentationer af 0 en stor bekymring? Og hvad så? I stedet for 16 unikke værdier kan vi kun gemme 15 værdier. Vi har råd til at reducere rækkevidden med 1, er det ikke? For softwareudvikleren bekymrer det måske ikke, men for en kredsløbsdesigner kan det være meget frustrerende først at kontrollere, om værdien er +0, og derefter kontrollere, om den er -0.

2) Signeret forlængelse virker ikke for negative tal:

Størrelsen af ​​data stiger hurtigt. Nogen tid skal vi udvide bitsystemet, så vi kan øge rækkevidden af ​​data, der kan lagres. I 2014 overskred Gangnam Style-video YouTubes visningsgrænse, og det tvang YouTube til at opgradere antallet af visninger fra 32-bit til 64-bit signeret heltal. Tilsvarende vil 32-bit Unix-uret flyde over den 19. januar 2038, fordi det registrerer tid i sekunder i et 32-bit signeret heltal.

Så det er lige så vigtigt, at vores repræsentationssystem let kan udvides, hvilket ikke er muligt med dette repræsentationssystem.

Decimal

4-bit

5-bit

6-bit

+2

0010

00010

000010

+7

0111

00111

000111

-2

1010

10010 (!= 11010)

100010 (!= 111010)

-7

1111

10111 (!= 11111)

100111 (!= 111111)

3) Binær addition virker ikke:

Lad os prøve at tilføje to binære tal:

Binær

Decimal

Binær

Decimal

Binær

Decimal

Nummer 1

0010

+2

0111

+7

1101

-5

Nummer-2

1010

-2

1010

-2

0011

+3

Binær addition

1100

-4

0001

+1

0000

+0

Decimal tilføjelse

+0

+5

-2

Hvorfor virker en simpel binær addition ikke her? Årsagen er, at fortegnsbitten (mest venstre) ikke er en almindelig bit og ikke en del af det faktiske tal. Forestil dig situationen, hvor man skal designe hardwarekredsløbet til at ignorere fortegnsbitten for at udføre addition og derefter tilføje fortegnsbitten.

Så dette var en naiv måde at repræsentere signeret heltal. Hovedproblemet med denne tilgang er, at vi har kortlagt negative tal ned og op. Hvis vi ændrer vores kortlægningssystem til top-down dem, vil nogle af ovenstående problemer blive løst.

b) 1's Co mplement

Hvis vi omformer vores negative tal fra top-down, vil vi få følgende binære tabel:

Ja Nej.

Binær repræsentation

Decimalværdi

1’s komplement

Signeret bit

EN

0000

+0

+0

B

0001

+1

+1

C

0010

+2

+2

D

0011

+3

+3

OG

0100

+4

+4

F

0101

+5

+5

G

0110

+6

+6

H

0111

+7

+7

jeg

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

Hvordan får man binær repræsentation af et heltal i 1’s komplementmetode?

  • Positive tal er repræsenteret svarende til fortegnsheltalsmetoden
  • Negative tal repræsenteres ved at invertere hver bit af det tilsvarende positive tal (invertering kan nemt udføres ved at bruge NOT gate under hardwaredesign)

Lad os analysere dette nøje for at se, om vi har opnået nogle forbedringer.

1) To repræsentationer af nul:

I denne tilgang har vi også to repræsentationer af nul.

2) Signeret forlængelse virker ikke for negative tal:

Signeret forlængelse fungerer perfekt til negative tal.

Decimal

4-bit

5-bit

6-bit

+2

0010

00010

000010

+7

0111

00111

000111

-2

1101

11101

111101

sammenligne strenge java
-7

1000

11000

111000

3) Binær addition fungerer med modificerede regler:

Binær

Decimal

Binær

Decimal

Binær

Decimal

Nummer 1

0010

+2

0111

+7

1010

-5

Nummer-2

1101

-2

1101

-2

0011

+3

Binær addition

1111

-0

0100

+4

1101

-2

Decimal tilføjelse

+0

+5

-2

Svaret er ikke altid korrekt, men det er meget tæt på det rigtige svar. Vi kan få det til at fungere, hvis vi følger reglen hvis du har genereret fremføring på din mest venstre bit, så smid den ikke væk i stedet for at bringe den tilbage og tilføje den til den højre bit.

Binær

Decimal

Binær

Decimal

Binær

Decimal

Nummer 1

0111

+7

1110

-1

0111

+7

Nummer-2

1101

-2

1001

-6

1011

-4

Binær addition

(1) 0100

+4

(1) 0111

+7

(1) 0010

+2

Tilføjer bære fremad tilbage

0101

+5

1000

-7

0011

+3

Absolut 1's komplementmetode er bedre end signeret bit. Vores største bekymringer er løst, men problemet er fortsat (med to repræsentationer af nul), og vores hack i binær addition giver ledetråde til at forbedre 1's komplementmetode. Lad os omformulere disse sætninger for at gøre det nemmere.

  • Vi har en ekstra repræsentation af nul, hvilket er unødvendigt
  • Mens addition af to binære tal, hvis vi har en fremføring i den venstre bit, så skal vi tilføje +1 til resultatet, dvs. det rigtige svar kan findes ved at gå ned til næste række i den binære tabel.

Begge fortæller os, at en ekstra repræsentation af nul er årsagen til problemet. Så lad os fjerne dette ekstra nul og flytte alle negative værdier til næste række (-7 vil flytte fra I -> J, -6 vil flytte fra J -> K og så videre...)

c) 2's komplement

Når vi fjerner -0 fra 1'erens komplementtabel og flytter alle negative værdier en række nedenunder, får vi følgende tabel, som kaldes 2's komplement:

Ja Nej.

Binær repræsentation

Decimalværdi

2’s komplement

1’s komplement

Signeret bit

EN

0000

+0

+0

+0

B

0001

+1

+1

+1

C

0010

+2

+2

+2

D

0011

+3

+3

+3

OG

0100

+4

+4

+4

F

0101

+5

+5

+5

G

0110

+6

+6

+6

H

0111

+7

+7

+7

jeg

1000

-8

-7

-0

J

1001

-7

= invers af 7 + 1-bit

-6

-1

K

1010

-6

= invers af 6 + 1-bit

-5

-2

L

1011

-5

= invers af 5 + 1-bit

-4

-3

M

1100

-4

= invers af 4 + 1-bit

-3

-4

N

1101

-3

= invers af 3 + 1-bit

-2

-5

O

1110

-2

= invers af 2 + 1-bit

-1

-6

P

1111

-1

= invers af 1 + 1-bit

-0

-7

Hvordan får man binær repræsentation af et heltal i 2's komplementmetode?

  • Positive tal er repræsenteret svarende til fortegnsheltalsmetoden
  • Negative tal repræsenteres ved at invertere hver bit af det tilsvarende positive tal og derefter tilføje 1 bit til det

1) En repræsentation af nul:

Nu har vi kun én repræsentation af nul, og det giver os mulighed for at gemme i alt 16 unikke værdier (+0 til +7 og -1 til -8).

2) Signeret forlængelse fungerer for negative tal:

Signeret forlængelse fungerer perfekt til negative tal.

Decimal

4-bit

5-bit

6-bit

+2

0010

00010

000010

+7

0111

00111

000111

-2

1110

11110

111110

-7

1001

11001

111001

3) Binær addition:

Binær

Decimal

Binær

Decimal

Binær

Decimal

Binær

Decimal

Nummer 1

0010

+2

0111

+7

1011

-5

1111

-1

Nummer-2

1110

-2

1110

-2

0011

+3

1010

-6

Svar

0000

+0

0101

+5

1110

-2

1001

-7

4) Første bit er en fortegnsbit:

2's komplement har denne fine egenskab, at første bit er en tegnbit, fordi alle positive starter med 0, mens alle negative med 1.

5) Kontrol af hukommelsesoverløb:

Mens vi tilføjede, sørgede vi for, at vores svar er inden for rækkevidden, men under design af hardware skal hukommelsesoverløb registreres. Det vil være en meget dårlig idé for hardwaredesignere at kontrollere størrelsen for at fange overløb. 2s komplementmetode giver en meget enkel måde at registrere hukommelsesoverløb. jeg f. indførsel til fortegnsbit ikke er lig med udførelse af fortegnsbit, så er der tale om hukommelsesoverløb dvs., hvis indfør til signeret bit er 0, men udførelse er 1, eller hvis indfør 1, men udførelse er 0, så er der tale om hukommelsesoverløb.

Binær

Decimal

Binær

Decimal

Binær

Decimal

Binær

Decimal

Nummer 1

1011

-5

java programmer
0010

2

0111

+7

1011

-5

Nummer-2

1100

-4

0110

6

1110

-2

0011

3

Tilføjelse

(1) 0111

(0)1000

(1)0101

(0)1110

bære ind for at underskrive bit

0

flyde over

1

flyde over

1

Ingen

0

Ingen

udføre for at underskrive bit

1

0

1

0