logo

Tvås komplement

Det finns tre olika sätt att representera signerat heltal (artikel) . a: Signerad bit, b: 1:s komplement och c: 2:s komplement. Låt oss försöka förstå hur dessa metoder har härletts och varför 2:s komplement föredras framför andra.

Som vi vet lagras data i bitar. Hur kan vi lagra signerat heltal i minnet? För att lösa detta problem kommer vi först att utveckla en naiv lösning och sedan upprepa den tills vi har den bästa lösningen för vårt problem.



a) Signerad bit

När man försöker lagra ett signerat heltal, verkar det självklart att reservera biten längst till vänster för tecken och använda återstående bitar för att faktiskt lagra värdena. Till exempel: i 4-bitars system kommer den första biten från vänster att reserveras för tecken (0 representerar positivt medan 1 representerar negativt) och andra 3 bitar kommer att användas för att lagra värdena. På liknande sätt i 8-bitars system kommer första biten från vänster att användas för tecken och återstående 7 kommer att användas för värden.

Mr. Nej.

Binär representation



Decimalt värde

A

0000



+0

B

0001

+1

C

0010

+2

D

0011

+3

OCH

0100

+4

F

0101

+5

G

0110

+6

H

0111

+7

jag

1000

-0

J

1001

-1

K

1010

-2

L

1011

-3

M

1100

-4

N

1101

-5

O

1110

-6

P

1111

-7

Genom att använda detta tillvägagångssätt kan vi framgångsrikt representera signerat heltal. Men när vi analyserar det närmare, kan vi observera följande nackdelar:

1) Två representationer av noll:

I 4-bitars system bör vi kunna lagra 16 (24) värden, men +1 till +7 och -1 till -7 är bara 14 värden. Var finns de två kvarvarande värdena? När vi observerar tabellen noggrant kommer vi att ta reda på att dessa två värden konvergerar till 0. Vi har alltså två representationer av noll, det vill säga en representation för +0 och en annan för -0.

Men är två representationer av 0 ett stort problem? Än sen då? Istället för 16 unika värden kan vi bara lagra 15 värden. Vi har råd att minska intervallet med 1, eller hur? För mjukvaruutvecklaren kanske det inte berör men för en kretsdesigner kan det vara väldigt frustrerande att först kontrollera om värdet är +0 och sedan kontrollera om det är -0.

2) Signerad anknytning fungerar inte för negativa nummer:

Storleken på data ökar snabbt. En tid behöver vi utöka bitsystemet så att vi kan öka mängden data som kan lagras. 2014 svämmade Gangnam Style-video över YouTubes visningsgräns och det tvingade YouTube att uppgradera antalet visningar från 32-bitars till 64-bitars signerade heltal. På samma sätt kommer 32-bitars Unix-klocka att svämma över den 19 januari 2038 eftersom den registrerar tid i sekunder i ett 32-bitars signerat heltal.

Så det är lika viktigt att vårt representationssystem lätt kan utökas vilket inte är möjligt med detta representationssystem.

Decimal

4-bitars

5-bitars

6-bitars

+2

0010

00010

000010

+7

0111

00111

000111

-2

1010

10010 (!= 11010)

100010 (!= 111010)

-7

1111

10111 (!= 11111)

100111 (!= 111111)

3) Binär addition fungerar inte:

Låt oss försöka lägga till två binära tal:

Binär

Decimal

mia khalifas ålder

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

Decimaltillägg

+0

+5

-2

Varför fungerar inte en enkel binär addition här? Anledningen är att teckenbiten (vänster mest) inte är en vanlig bit och inte en del av det faktiska talet. Föreställ dig situationen där man måste designa hårdvarukretsen för att ignorera teckenbiten för att utföra addition och sedan lägga till teckenbiten.

Så det här var ett naivt sätt att representera signerat heltal. Det största problemet med detta tillvägagångssätt är att vi har kartlagt negativa tal ner och upp. Om vi ​​ändrar vårt kartsystem så att det går uppifrån och ner kommer några av ovanstående problem att lösas.

b) 1's Co implement

Om vi ​​mappar om våra negativa tal uppifrån och ner kommer vi att få följande binära tabell:

Ja Nej.

Binär representation

Decimalt värde

1:s komplement

Signerad bit

A

0000

+0

+0

B

0001

+1

+1

C

0010

+2

+2

D

0011

+3

+3

OCH

0100

+4

+4

F

0101

+5

+5

G

0110

+6

+6

H

0111

+7

+7

jag

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

maskinskriven för varje
P

1111

-0

-7

Hur får man binär representation av ett heltal i 1:s komplementmetod?

  • Positiva tal representeras på samma sätt som heltalsmetoden för tecken
  • Negativa tal representeras genom att invertera varje bit av motsvarande positiva tal (invertering kan enkelt göras genom att använda NOT-grinden under hårdvarudesign)

Låt oss analysera detta noggrant för att se om vi har uppnått någon förbättring.

1) Två representationer av noll:

I detta tillvägagångssätt har vi också två representationer av noll.

2) Signerad anknytning fungerar inte för negativa tal:

Signerad förlängning fungerar perfekt för negativa tal.

Decimal

4-bitars

5-bitars

6-bitars

+2

0010

00010

000010

+7

0111

00111

000111

-2

1101

11101

111101

-7

1000

11 000

111 000

3) Binär addition fungerar med modifierade 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

Decimaltillägg

+0

+5

java försök fånga
-2

Svaret är inte alltid rätt, men det är väldigt nära det rätta svaret. Vi kan få det att fungera om vi följer regeln som om du har genererat överföring framåt längst till vänster, släng inte det istället för tillbaka det och lägg till det längst till höger.

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

Lägger till bär framåt bakåt

0101

+5

1000

-7

0011

+3

Definitivt 1:s komplementmetod är bättre än signerad bit. Våra stora problem är lösta men problemet kvarstår (med två representationer av noll) och vårt hack i binär addition ger ledtrådar för att förbättra 1:s komplementmetod. Låt oss omformulera dessa meningar för att göra det lättare.

  • Vi har en extra representation av noll vilket är onödigt
  • Medan addition av två binära tal, om vi har en överföring framåt i den vänstra biten, måste vi lägga till +1 till resultatet, dvs det rätta svaret kan hittas genom att gå ner till nästa rad i den binära tabellen.

Båda säger till oss att en extra representation av noll är grundorsaken till problemet. Så låt oss ta bort denna extra nolla och flytta alla negativa värden till nästa rad (-7 kommer att flytta från I -> J, -6 kommer att flytta från J -> K och så vidare...)

c) 2:s komplement

När vi tar bort -0 från 1:ans komplementtabell och flyttar alla negativa värden en rad under, får vi följande tabell som kallas 2:s komplement:

Ja Nej.

Binär representation

Decimalt värde

2:s komplement

1:s komplement

Signerad bit

A

0000

+0

+0

+0

B

0001

+1

+1

+1

C

0010

+2

+2

+2

D

0011

+3

+3

+3

OCH

0100

+4

+4

+4

F

0101

+5

+5

+5

G

0110

+6

+6

+6

H

0111

+7

+7

+7

jag

1000

-8

-7

-0

J

1001

-7

= invers av 7 + 1-bit

-6

-1

K

1010

-6

= invers av 6 + 1-bit

-5

-2

L

1011

-5

= invers av 5 + 1-bit

-4

-3

M

1100

-4

= invers av 4 + 1-bit

-3

-4

N

1101

-3

= invers av 3 + 1-bit

-2

-5

O

1110

-2

= invers av 2 + 1-bit

-1

-6

P

1111

-1

= invers av 1 + 1-bit

-0

-7

Hur får man binär representation av ett heltal i 2:s komplementmetod?

  • Positiva tal representeras på samma sätt som heltalsmetoden med tecken
  • Negativa tal representeras genom att invertera varje bit av motsvarande positiva tal och sedan lägga till 1 bit till det

1) En representation av noll:

Nu har vi bara en representation av noll och den tillåter oss att lagra totalt 16 unika värden (+0 till +7 och -1 till -8).

2) Signerad anknytning fungerar för negativa nummer:

Signerad förlängning fungerar perfekt för negativa tal.

Decimal

4-bitars

5-bitars

6-bitars

latex lista
+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örsta biten är en signerad bit:

2:s komplement har den här fina egenskapen att första biten är en teckenbit eftersom alla positiva börjar med 0 medan alla negativa med 1.

5) Kontroll av minnesspill:

När vi gjorde tillägg såg vi till att vårt svar ligger inom intervallet, men när vi designade hårdvara måste minnesspill upptäckas. Det kommer att vara mycket dålig idé för hårdvarudesigners att kontrollera storleken för att fånga översvämning. 2:s komplementmetod ger ett mycket enkelt sätt att upptäcka minnesspill. jag f överföring till signerad bit är inte lika med överföring av signerad bit, då är det fallet med minnesspill d.v.s. om överföring till signerad bit är 0 men utför är 1 eller om överföring är 1 men utför är 0, är ​​det fallet med minnesspill.

Binär

Decimal

Binär

Decimal

Binär

Decimal

Binär

Decimal

Nummer 1

1011

-5

0010

2

0111

+7

1011

-5

Nummer 2

1100

-4

0110

6

1110

-2

0011

3

Tillägg

(1) 0111

(0)1000

(1)0101

(0)1110

bära in till teckenbit

0

svämma över

1

svämma över

1

Nej

0

Nej

utföra för att underteckna bit

1

0

stater i usa
1

0