Hi Kevin!
Diese im Buch beschriebene Art um negative Integer zu kodieren, ist keine Eigenart von C (oder C++). Man macht das in fast allen Sprachen so.
Wenn man mit deiner Methode zwei Variablen addieren will, dann müsste man zuerst feststellen, ob eine der Werte negativ ist und dann den absoluten Wert der negativen Variable von der positiven Subtrahieren (bei gleichem Vorzeichen wird addiert).
Kann man machen, muss man aber nicht. ;-)
Besser ist natürlich eine Methode, die bei einer Addition oder Subtraktion automatisch das Vorzeichen berücksichtigt. Schneller ist das dann auch und Speed ist ja schon beim Programmieren immer schon die halbe Miete gewesen... :)
Nimmt man die Werte aus dem Buch (+7, -7) und addiert sie, muss 0 rauskommen. Und in der Tat kommt das auch raus (ich nehme mal nur 5 Bits für die Zahlendarstellung):
00111 + 11001 = 00000
Die negative Zahl bekommt man, indem man die positiove von Null abzieht (wie auch sonst...):
00000 - 00111 = 11001
Wenn das mit dem Überlauf unklar ist, dann stell dir vor es steht noch ein 6tes Bit vor der "Null":
(1)00000 - (0)00111 = (0)11001
Übrigends kann man das von Null Abziehen auch durch negieren der Bits und addition von 00001 durchführen.
OK, bleibt noch das Vorzeichenbit. Das ist eigentlich nur dazu da, damit man (z.B. für Bildschirmausgaben) schnell feststellen kann, ob ein Wert positiov oder negativ ist. Zum Rechnern (bei normalen Additionen und subtraktionen) wird es nicht benötigt.
Ich hoffe das hilft dir weiter.
Bis den
Andreas