Binärt subtraktion

Som en vanlig aritmetisk operation kan göras en subtraktion utan att tänka på hur tecknet minus uppfattas.

Exempel 1: Subtrahera 1101101 – 11011. Första binära talet har 7 siffror och den andra 5. Det påverkar inte operationen ifall man kompletterar med nollor i de mest signifikanta delen av talen.

Kolumn 7 6 5 4 3 2 1
 
Bärare 0 10 0 10
1 1 0 1 1 0 1
0 0 1 1 0 1 1
Resultat 1 0 1 0 0 1 0
  • I kolumnen 2 (från höger till vänster) lånas en 1 från den tredje biten och då biten blev 0. Värdet i kolumnen 2 har blivit 10 (decimalt 2) och 2 – 1 är 1
  • I kolumnen 5 också lånas en 1

Nummerrepresentation

I nummerrepresentationstekniker är det binära nummersystemet den mest använda representationstekniken inom digital elektronik. Men att representera binära negativa tal för datorer är inte lätt, en dator vet inte vad minustecknet innebär. För att representera binära negativa tal användes olika teknik såsom teckenbit och ett tals komplement.

Teckenbit

Teckenbit – bit längst till vänster i talet (MSB, Most Significant Bit) sätts till 0 om talet är positivt och om talet är negativt sätts biten till 1. Det här sättet att representera positiva och negativa binära tal kallas signerat tal eller på engelska ”sign-magnitude representation” eller bara ”signed integers”. Signerade tal omfattar positiva och negativa tal. Binära tal som inte använder teckenbiten kallas osignerat tal eller på engelska ”unsigned integers”. Osignerade tal är endast positiva.

Till exempel +7 eller bara 7 och -7 kan representeras binärt med åtta bitar så här:

  • +7 = 00000111
  •  –7 = 10000111 

Exempel 1: Addera 75 + 46 som signerat tal

Kolumn 27 26 25 24 23 22 21 20
  128 64 32 16 8 4 2 1
1 1 1
    75 0 1 0 0 1 0 1 1
+ 46 0 0 1 0 1 1 1 0
121 0 1 1 1 1 0 0 1

Exempel 2: Addera 107 + 46 som signerat tal genererar en bit som inte får plats, fel!

Kolumn 27 26 25 24 23 22 21 20
  128 64 32 16 8 4 2 1
1 1 1 1 1
    107 0 1 1 0 1 0 1 1
+  46 0 0 1 0 1 1 1 0
?
   25 0 0 0 1 1 0 0 1

Observera att om ettan tas med blir det resultatet 10011001, omvandlat till decimalt -25 eftersom den rödmarkerade 1an säger att talet är negativt. 

Exempel 3: Addera +46 + (-25) som signerat tal

Kolumn 27 26 25 24 23 22 21 20
  128 64 32 16 8 4 2 1
0 1 0 1
    46 0 0 1 0 1 1 1 0
–  25 1 0 0 1 1 0 0 1
 +21 0 0 0 1 0 1 0 1

Eftersom 46 – 25 = 21, signeras talet med teckenbiten 0 i resultatet och inte med 1

Komplement

Olika typer av komplement är möjliga för det binära numret, men 1: s och 2: s komplement används mest för binära tal.

  • Vi kan hitta första komplement av det binära numret genom att helt enkelt invertera det angivna numret. Till exempel det binära talet 1011001 har som första komplement 0100110.
  • Vi kan hitta den andra komplement för det binära talet genom att invertera varje bit (0 till 1 och 1 till 0) och lägga till 1 till den minst signifikanta biten. Till exempel det binära talet 1011001 har som andra komplement (0100110) + 1 = 0100111.

Exempel 6 – Representera binärt talen +120 och -120

27 26 25 24 23 22 21 20  
128 64 32 16 8 4 2 1  
+120 0 1 1 1 1 0 0 0  
-120 1 0 0 0 0 1 1 1 1-komplement

Subtraktion och addition med hjälp av första komplement

Säg att B subtraheras från A, det vill säga A – B. Tecknet minus vill man undvika när man räknar binärt och istället kan man addera A + (-B). Detta kan göras med första komplementen av B, men operationen kan generera en siffra till som kallas ”carrier”.

  • Om carrier är en 1 kommer denna att adderas till resultatet.
  • Om carrier är en 0 betyder det att resultatet är negativt.

Exempel 1: Säg att A + (-B) = 1100 + (- 0101)

  1. Beräkna första komplement för 0101 som blir 1010
  2. Addera talen:
Kolumn 7 6 5 4 3 2 1 Decimalt
 
1 1 0 0   12
0 1 0 1 –  5
7
Invertera andra termen 1 0 1 0
Addera
Carrier – overflow 1
1 1 0 0
+ 1 0 1 0
Overflow 1 0 1 1 0 -x
 
  0 1 1 0
Overflöw adderas + 1 +  1
Resultat 0 1 1 1 7

Exempel 2: subtrahera 0101 – 1100

Kolumn 7 6 5 4 3 2 1 Decimalt
A – B
A 0 1 0 1 5
B 1 1 0 0 –  12
–  7
1 1 1
0 1 0 1
B första komplement + 0 0 1 1
Ingen overflow, negativt 1 0 0 0
Invers igen 0 1 1 1 -7
Så 10002 = -710

Exempel 3: Subtrahera 10101 – 10111

Kolumn 7 6 5 4 3 2 1 Decimalt
A – B
A = 10101 1 0 1 0 1 21
B = 10111 1 0 1 1 1 -23
-2
1 0 1 0 1
B första komplement + 0 1 0 0 0
Ingen overflow, negativt 1 1 1 0 1 -2
Invers igen 0 0 0 1 0 -2
Så 111012 = -210

Exempel 4: Addera -1101 och -1110

Kolumn 7 6 5 4 3 2 1 Decimalt
-A – B
A = -1101 0 1 1 0 1 -13
B = -1110 0 1 1 1 0 -14
-27
1
A första komplement 1 0 0 1 0
B första komplement + 1 0 0 0 1
1 som overflow 1 0 0 0 1 1
 
  1 1
  1 0 0 0 1 1
Overflow adderas till resultat + 1
0 0 1 0 0
 Inverteras 00100 till 11011
Så 110112 = -2710 1 1 0 1 1 -27

Addition och subtraktion med hjälp av andra komplement

En enkel regel att följa upp: se till att båda termer är lika i antal siffror, annars padda. Därefter kan man beräkna den andra komplementet. För att få ett tals två-komplement gör så här:

  1. Padda
  2. Invertera talet
  3. addera en 1

Exempel 1: Subtrahera 01001102 – 0101012

Kolumn 9 8 7 6 5 4 3 2 1 Decimalt
A – B    
A = 01001102    
B = -0101012    
128 64 32 16 8 4 2 1
0 1 0 0 1 1 0 38
Padda 0 0 1 0 1 0 1 -21
17
1-komplement för 00101012 1 1 0 1 0 1 0
Addera en 1 + 1
2-komplement för 00101012 1 1 0 1 0 1 1
1 1 1 1 1
3. Addera 0 1 0 0 1 1 0
+ 1 1 0 1 0 1 1
1 overflow, 0 teckenbiten 1 0 0 1 0 0 0 1
0100110– 010101= 0100012 0 1 0 0 0 1 17

Exempel 2: Subtrahera 01101.12 – 01012

Kolumn 9 8 7 6 5 4 3 2 1 Decimalt
A – B    
A = 01101.12     13.5
B = -01012     -5.0
16 8 4 2 1 0.5
0 1 1 0 1 . 1
Padda 0 0 1 0 1 . 0
          1    
1-komplement för 00101.02 1 1 0 1 0 . 1
Addera en 1 + 1
2-komplement för 00101.02 1 1 0 1 1 . 0
1 1 1 1 1
3. Addera 0 1 1 0 1 . 1
+ 1 1 0 1 1 . 0
1 overflow, 0 teckenbiten 1 0 1 0 0 0 . 1
01101.12 – 01012 = 1000.12 1 0 0 0 . 1 8.5

Exempel 3:  Subtrahera 01012 – 010102

Kolumn 9 8 7 6 5 4 3 2 1 Decimalt
A – B    
A = 01012     5
B = 010102     10
64 32 16 8 4 2 1
Padda 0 0 1 0 1
0 1 0 1 0
           
1-komplement för 010102 1 0 1 0 1
Addera en 1 + 1
2-komplement för 010102 1 0 1 1 0
1
3. Addera 0 0 1 0 1
+ 1 0 1 1 0
01012 – 010102 = 110112 1 1 0 1 1 -x
Inverterar 11011 till 00100 0 0 1 0 0
Adderar en 1 1
01012 – 010102 = 1012 0 0 1 0 1 -5

Exempel 4: Subtrahera 25510 – 17010

Kolumn 11 10 9 8 7 6 5 4 3 2 1 Decimalt
A – B        
A = 25510         255
B = 17010         – 170
128 64 32 16 8 4 2 1
Padda (behövs inte här) 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0
           
1-komplement för 010102 0 1 0 1 0 1 0 1
Addera en 1     + 1
2-komplement för 010102 0 1 0 1 0 1 1 0
1 1 1 1 1 1 1
3. Addera 1 1 1 1 1 1 1 1
+   0 1 0 1 0 1 1 0
Overflow kastas bort, rörmarkerade 1an. 1 0 1 0 1 0 1 0 1 85

Subtraktion med tvåkomplement med decimaler

Exempel 1: Subtrahera 13,5 – 5

Kolumn 9 8 7 6 5 4 3 2 1       Decimalt
A – B    
A = 13,510     13,5
B = 510     – 5
128 64 32 16 8 4 2 1 . 0.5 0.25
Padda 1 1 0 1 . 1
0 1 0 1 0
                 
1-komplement för 0101.02 1 0 1 0 1
Addera en 1 +   1  
2-komplement för 1011.02 1 0 1 1   0  
1 1 1 1
3. Addera 1 1 0 1 . 1
+ 1 0 1 1 . 0  
Overflow kastas bort, rörmarkerade 1an. 1 1 0 0 0 . 1 8.5