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 | 0 | 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 | 0 | 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)
- Beräkna första komplement för 0101 som blir 1010
- 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 | |||||||
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:
- Padda
- Invertera talet
- 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 | ||
01001102 – 0101012 = 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 | ||||||||||
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 | ||||||||||||
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 | |||||||||||||
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 | |||||