Tvåkomplementsform

3-bitars 2-komplement

Tvåkomplementsform är ett sätt att representera negativa tal med det binära talsystemet. Då utnyttjas den mest signifikanta biten för att markera talets tecken (signerad aritmetik). En förutsättning för att det här skall fungera är att man använder fast ordlängd.

I systemet finns bara en 0:a (andra representationer kan ha två), närmaste högre tal fås genom addition med 1 till den minst signifikanta biten (LSB) och invertering av tal sker genom bitvis invertering av alla bitar följt av en addition med 1 i LSB.

Definition

Ett maskintal, det vill säga de tal som exempelvis datorn räknar med, mellan -1 och 1 med n bitar:

motsvarar det verkliga talet

Exempel

Exemplen nedan använder en ordlängd på 8 bitar.

RepresentationDecimaltHexadecimaltBinärt
Osignerad0 - 2550x00 - 0xFF00000000 - 11111111
Signerad-128 - 1270x80 - 0x7F10000000 - 01111111

För att ändra ett tvåkomplementtals tecken inverteras först bitmönstret och sedan adderas 1.

Exempel:

UrsprungligtDecimaltInverteratPlus 1Decimalt
0000000111111111011111111-1
11111111-100000000000000011
10101010-86010101010101011086
0000000001111111100000000
10000000-1280111111110000000-128²

¹ Talet noll 0 har inget tecken och operationen är verkningslös!
² Här är bara teckenbiten satt och talet har inget värde.

Ett sätt att se omvandlingen från binärt till decimalt för negativa tal, är att omvandla det binära talet enligt den vanliga teckenlösa konverteringen, och om talet är större än 127, dra från 256. För att omvandla från decimalt till binärt, lägg till 256 om talet är negativt och omvandla till binärt teckenlöst. Exempel:

BinärtDecimalt teckenlöstDra av 256
10000000128-128
11111111255-1

Användning i datorer

Eftersom binära talrepresentationer är vanliga i datorer används tvåkomplement oftast i begränsad precision, det vill säga att ett tal består av högst stycken bitar. Detta gör att man inte kan hantera hur stora eller precisa tal som helst och man låter de binära talen representera tal mellan -1 och 1.

Att tvåkomplementsform kräver fast ordlängd kan vara en av datorernas största akilleshälar. För att göra en operation på två tal med olika ordlängd eller representation krävs att man typomvandlar det ena först och sådant tar tid. I C och C++ görs typomvandlingen vanligtvis automatiskt till den större typen men man kan tvinga den till valfri typ med en explicit typomvandling.

I detta system är talet positivt om den mest signifikanta biten är 0 och negativt om den är 1. Vid addition och subtraktion sker inga oegentligheter när 0:an passeras (carry-flaggan kan försummas), men när talomfånget överskrids inträffar spill, vilket gör att addition av två positiva tal kan ge ett negativt tal som summa (då ettställs spillflaggan). Detta händer om rätt summa är större än det största positiva talet, t.ex. 127 för 8-bitstal.

Etymologi

Representationssystemet har fått sitt namn från att

Se även

Media som används på denna webbplats

Binär talrep 3 bitar 2-komplement.svg
Författare/Upphovsman: Moberg, Licens: CC BY-SA 3.0
Binär talrepresentation i 2-komplement med 3 bitar