Representationer av tecknade tal används för att lösa problemet med att representera negativa heltal i binär form. Problemet med att försöka lagra det negativa tecknet (-) i ett binärt tal är att det inte finns några tillstånd kvar att använda för att representera den negativa tilldelningen. Det är inte möjligt att bara använda "off" för minus och "on" för plus eftersom datorn inte skulle ha något sätt att veta om det är en siffra eller ett tecken.
För att lösa detta problem uppfann datorkonstruktörer två metoder för att lagra negativa binära tal: tecken och magnitud och tvåkomplement. Dessa metoder ger alternativa representationer för tecknade tal.
Varför problemet uppstår
I binär representation finns varje bit bara i två tillstånd (0 eller 1). Om man försöker lägga till ett separat "teckenbit"-koncept måste man göra tydligt vilka bitar som är själva talet och vilken som anger tecken. Utan en etablerad konvention blir talens tolkning tvetydig och aritmetik komplicerad. Olika representationer försöker balansera läsbarhet, enkelhet vid aritmetik och utnyttjande av de möjliga bitmönstren.
Tecken och magnitud (sign-and-magnitude)
I denna enkla metod används den mest signifikanta biten (MSB) som teckenbit: 0 betyder positivt och 1 betyder negativt. De återstående bitarna ger magnitude (storleken) i vanlig binär form.
Exempel med 4 bitar:
- 0001 = +1
- 1001 = -1
- 0111 = +7
- 1111 = -7
- 0000 = +0 och 1000 = -0 (två representationer av noll)
Fördelar: intuitiv och lätt att tolka för människor. Nackdelar: finns två olika nollvärden (positiv och negativ noll) och aritmetik (särskilt addition och subtraktion) blir mer komplicerad eftersom tecknet måste hanteras separat.
Tvåkomplement (two's complement)
Tvåkomplement är den mest använda representationen i moderna datorer. Här representeras negativa tal genom att invertera bitarna i det positiva talet (ettkomplement) och sedan lägga till 1. Resultatet blir en unik binärsträng för varje heltal.
Hur man bildar tvåkomplement för ett negativt tal (med n bitar):
- Skriv talets absoluta värde i binärt med n bitar.
- Invertéra alla bitarna (byt 0 ↔ 1).
- Lägg till 1 till det inverterade värdet.
Alternativt: ett negativt tal -x i tvåkomplement = 2^n − x (tolkat som ett värde i n bitar).
Exempel med 4 bitar:
- +3 = 0011
- -3: invertera 0011 → 1100, lägg till 1 → 1101 (så -3 = 1101)
- Range för 4 bitar: -8 ... +7 (alltså -2^{n-1} ... 2^{n-1}-1)
Fördelar: unik nollrepresentation (endast 0000), förenklad hårdvaruimplementation för addition och subtraktion (samme krets som för osignerade tal i många fall), och aritmetik fungerar naturligt med binär addition där överföringsbit kan ignoreras. Nackdelar: asymmetrisk interval (minsta negativa tal har ingen positiv motsvarighet, t.ex. i 4 bitars tvåkomplement finns -8 men ingen +8) och behov att tolka MSB som viktningsbit med negativ vikt istället för en ren teckenbit.
Hur man tolkar tvåkomplementvärden
Med n bitar kan du tolka ett tvåkomplementtal b_{n-1} b_{n-2} ... b_0 som:
värde = -b_{n-1}·2^{n-1} + Σ_{i=0}^{n-2} b_i·2^i
Det innebär att MSB fungerar som en negativ vikt när den är 1. Praktiskt tolkar man ofta: om MSB är 0 → talet är positivt (vanlig binär tolkning); om MSB är 1 → för att få det absoluta värdet inverterar man bitarna och lägger till 1.
Arimetisk och overflow
I tvåkomplement kan addition göras på samma sätt som vid osignerade tal. För overflow gäller följande enkla regel: om du lägger ihop två tal med samma tecken och resultatet får annat tecken, så har overflow inträffat. En annan hårdvarureglering är att titta på carry in och carry out till MSB — om dessa skiljer sig indikerar det overflow.
Exempel (4 bitar): 7 + 1 = 0111 + 0001 = 1000 → tolkat som -8 → overflow, eftersom 7 + 1 inte kan representeras i intervallet -8…+7 utan overflow.
Jämförelse och praktisk användning
- Tvåkomplement används i praktiken i nästan alla moderna datorarkitekturer tack vare enkelheten i hårdvaran för addition/subtraktion och unika noll.
- Tecken och magnitud kan vara enklare att förstå vid presentation eller i vissa specialfall, men är mindre effektiv för aritmetik i hårdvara.
- Ettkomplement (ones' complement) är en annan äldre metod som har två nollor och användes i vissa tidiga system, men den har i stort sett försvunnit till förmån för tvåkomplement.
Snabbguide: konverteringar
- Decimal → tvåkomplement (negativt tal): välj n bitar, skriv |x| i binärt, invertera, lägg till 1.
- Tvåkomplement → decimal: om MSB = 0, tolka normalt; om MSB = 1, invertera +1 för att få |x| och sätt minus framför.
- Negation i tvåkomplement: invertera alla bitar och lägg till 1 (samma procedur för att få -x).
Sammanfattningsvis ger både tecken och magnitud och tvåkomplement sätt att representera negativa heltal i binärt, men tvåkomplement är oftast att föredra i praktiska system tack vare sin effektivitet för aritmetik och entydiga nollvärde.