Paminu wrote:
> Det svarer vel bare til at man opfatter binære tal som signed. Kan ikke lige
> se hvad der adskiller signed fra to-komplement.
>
http://en.wikipedia.org/wiki/Signed_number_representations
Kort sagt så er signed blot tallet i binær med bitten længst til venstre
sat til et ved negative tal.
Det betyder at tallet 0 har to repræsentationer nemlig
0000 0000
og
1000 0000
for 8 bit tal.
I 1 komplement så negerer man det positive tal for at få det negative.
så
0000 0110 (6)
bliver
1111 1001 (-6)
Bemærk at også her er der tegn for 0
0000 0000
og
1111 1111
1 komplement har den fordel at man kan umiddelbart kan summere positive
og negative tal.
6 og -6 ovenfor giver 1111 1111 altså 0 som resultat
0000 1000 (8) +
1111 1001 (-6)
0000 0010 (2)
Men både signed og 1 komplement er degenererede repræsentationer. En
degnereret repræsentation har synonymer blandt repræsentationerne, i
disse tilfælde er der synonymer for 0.
For at rette op på dette anvender man 2 komplement
Her lægger man et til 1 komplementet
Så (-0) bliver
0000 0000 (0)
1111 1111 (-0 i 1 komplement)
0000 0000 (-0 i 2 komplement)
Således finder vi (-6)
0000 0110 (6)
1111 1001 (-6 1 komplement)
1111 1010 (-6 2 komplement)
Først ser vi at 6+(-6) giver 0:
0000 0110+
1111 1010
=0000 0000
Ligeledes giver 8+(-6) 2 :
0000 1000+
1111 1010
=0000 0010
Med 2 komplement kan vi altså implementere både addition og subtraktion
hvis vi har kredsløb til at negere og kredsløb til at addere.
For 2 komplement tal gælder stadig at bitten længst til venstre viser om
tallet er positivt eller negativt.
/Søren