Datorns matematik

Vad menas med att datorer pratar ettor och nollor och att deras matematik görs också med ettor och nollor?

Svaret är datorns komponenter och den elektronik som datorn fungerar med. Det är inte min intention att skriva om elektronik utan om ettor och nollor som är viktiga delar i datorns matematik. En etta eller en nolla kallas för bit. En bit är den minsta mängden av information en dator hanterar. Åtta bitar kallas för ett oktett eller en byte, därmed är det korrekt att säga en byte består av åtta bitar även om ett oktett är mer korrekt.

Heltal i det binära talsystemet representeras som signerat och osignerat format.

  • Med signerat format menas att den första biten i det binära talet markerar om talet är positivt eller negativt. Till exempel i talet 10010011 är den första biten som säger till att talet är negativt. Om biten hade varit istället 0, så var talet positivt.
  • Med osignerat format menas endast positiva tal utan någon tecken före. I osignerat format finns alltid 0 som positivt nummer.

Det är väldigt enkelt att representera positiva och negativa tal i vårt dagliga liv. Vi använder positiva tal utan något tecken före och vi använder minustecknet före för negativa tal. Men i det digitala systemet är det inte möjligt att använda negativa tecken framför talet eftersom talet är i binär form. För att representera tecknet i binära tal behöver vi en speciell notation.

Signerade binära tal

Signerade binära tal representeras på tre sätt:

  • Signerad-Magnitud – Ett binärt tal markeras med en bit, 0 positiv, 1 negativ. Förutom denna teckenbit representerar n-1-bitar storleken på talet.
  • Första komplement – Genom att invertera varje bit av ett tal kan vi få första komplement av ett tal. Negativa tal kan representeras som första komplement och en extra bit precis som signerad-magnitud.
  • Andra komplement – Genom att invertera varje bit av ett tal och addera en 1 till den minsta signifikant delen får man det andra komplementet. För att markera ett tal som positivt eller negativt används den första bit i den mest signifikant delen i talet.
Bild 1: Binära tal representation

Första komplement

Första komplement används främst för att representera signerade binära tal. Förutom det används första komplement i aritmetiska operationer såsom addition och subtraktion.

Exempel 1 – Med åtta bitar representera +6 och -6 med första komplement

  • +6 = 610 = 000001102 Första biten markerar talet som positivt, ingenting behöver göras.
  • -6 = -610 = 000001102 Här behöver användas första komplementet. 00000110 inverteras 11111001 (representerar 000001102). Minustecknet behövs inte längre.  

Exempel 2 – Med åtta bitar och första komplement addera 4810 med -1910

  • 4810 = 001100002
  • -1910 = 000100112
  • Att använda minustecknet går det inte i en dators matematik därför används här första komplement 00010011 inverteras 11101100
  • Nu kan subtraktionen (4810 ) (-1910 ) skrivas om istället som addition så här: 001100002  + 111011002

Nu kan additionen räknas ut och för att förstå bättre det använder jag en tabell:

  • Första och andra rad är en del av tabellen.
  • Tredje rad är tom
  • Fjärde rad är carry (bärare)
  • Femte rad är 4810 i binärt
  • Sjätte rad är första komplement för 1910
  • Sjunde rad är tom
  • Åttonde rad är additionens resultat
  • I nionde rad adderas en 1 för att korrigera resultatet (carry)
      27 26 25 24 23 22 21 20
      128 64 32 16 8 4 2 1
         
carry   1 1 1
0 0 1 1 0 0 0 0
+ 1 1 1 0 1 1 0 0
  1 0 0 0 1 1 1 0 0
+ 1
48 – 19 = 29 0 0 0 1 1 1 0 1

Andra komplement

På liknande sätt som första komplement representeras negativa tal med hjälp av talets komplement. Skillnaden är att 1 adderas alltid till komplementet.

Exempel 2 – Med åtta bitar och andra komplement addera 2310 med -910

  • 2310 = 000101112
  • -910 = 000010012
  • 000010012 inverteras 11110110
  • 11110110 + 1 = 11110111
      27 26 25 24 23 22 21 20
      128 64 32 16 8 4 2 1
         
     out  in  
carry in = out, no overflow   1 1 1 1 1 1 1
carry ignoreras 0 0 0 1 0 1 1 1
+ 1 1 1 1 0 1 1 1
                 
23 – 9 = 14 0 0 0 0 1 1 1 0