Tvåkomplementsform

Från Rilpedia

Version från den 22 maj 2009 kl. 20.53 av MauritsBot (Diskussion)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

Tvåkomplementsform är ett sätt att representera negativa tal (minus) 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.

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

Representation Decimalt Hexadecimalt Binärt
Osignerad 0 - 255 0x00 - 0xFF 00000000 - 11111111
Signerad -128 - 127 0x80 - 0x7F 10000000 - 01111111

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

Exempel:

Ursprungligt Decimalt Inverterat Plus 1 Decimalt
00000001 1 11111110 11111111 -1
11111111 -1 00000000 00000001 1
10101010 -86 01010101 01010110 86
00000000 0 11111111 00000000
10000000 -128 01111111 10000000 -128²

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

Att tvåkomplementsform kräver fast ordlängd kan vara en av datorenas största akilleshälar. För att göra en operation på två tal med olika ordlängd eller representation så krävs det 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.

Se även

Personliga verktyg