Addition 16bit Zahlen mit Vorzeichen

Gast #106200
Lesenswert?

Hallo,

ich möchte/muss in meinem Assemblerprogramm für einen 8bit
Mikrocontroller zwei 16bit Werte mit Vorzeichen addieren. Der
Wertebereich von -32000 bis + 32000 reicht dann völlig aus.

Wie stelle ich aber nun das Vorzeichen geeignet dar
(Zweierkomplement?!? )und wie addiere ich dann richtig?

Würde mich sehr über Hilfe freuen!!

Danke und Gruß,

Peter.
Gast #106202
Lesenswert?

Hallo,

erstmal danke für die Antwort!

Ich verstehe die Addition leider nicht. wie sehen denn die register
binär aus? ich habe mal versucht mit der angegebenen Addition dezimal
-1 und dezimal +1 zu addieren. Sollte dann ja 0 rauskommen. Da komme
ich aber nicht hin.

Wo steckt der Fehler??

Danke nochmals,

Peter.
Gast #106203
Lesenswert?

-1 im Zweierkomplement:
1111111111111111
+1 normal:
0000000000000001

Also das seh ich so, dass wenn man die beiden Zahlen addiert, Null am
Ende rauskommen muss.
Hast du nen Plan, wie ne binäre Addition funktioniert?
Wie hast du die Sache versucht?

Gruss, Alex
Gast #106204
Lesenswert?

Hallo Alex,

beim Zweierkomplement gibt doch das höchstwertige bit das vorzeichen
an, oder nicht?

-1 wäre demnach:

1000000000000001

+1 klar:

0000000000000001

addiert wie beschrieben kommt da nicht Null raus!

das Einerkomplement wäre 0xFFFF - 1 , also binär:

1111111111111110

die +1 immer noch:

0000000000000001

nach Addition kommt jetzt Null raus! hier würde die angegebene Addition
stimmen.

Soweit mein Kenntnisstand.

Gruß,

Peter.
Gast #106205
Lesenswert?

Alex Antwort nicht gelesen? Oder nicht verstanden?
-1 als Zweierkomplement:
0b1111111111111111.
am höchsten Bit kann man zwar erkennen, ob es sich um eine positive
oder eine negative Zahl handelt, aber das heisst ja nicht, dass in den
verbleibenden 15bit der Betrag der Zahl steht (könnte man theoretisch
so machen, würde aber die MCs und/oder die Software unnötig
verkomplizieren. Mit Zweierkomplement ist das alles gar kein Ding:
0b1111111111111111 -1
0b0000000000000001  1
------------------
0b0000000000000000
Gast #106206
Lesenswert?

Aha, dann habe ich das Zweierkomplement nicht verstanden. Die Addition
ist schon klar. Stimmt schon.


Wie ist das Zweierkomplement definiert? Wie bilde ich es?

was ist z.b. dezimal -3 im Zweierkomplement?

Ich bitte nochmals um Hilfe!!

DANKE!!!!
Gast #106207
Lesenswert?

logisch: grösste darstellbare Zahl (bei 16bit: 65535) +1 - Betrag der
Zahl
also -3: 65536 -3=65533=0xfffd=0b1111111111111101
falls du es mal in einem Programm machen willst:
alle Bits invertieren und eine 1 addieren.
Praktisch: dich gar nicht drum kümmern und den Assembler/Compiler die
Umrechnung überlassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren