Programmieren - alles kontrollieren 4.939 Themen, 20.672 Beiträge

Programmierung in C

Kevin4 / 3 Antworten / Flachansicht Nickles

(jd) Mich interessiert, wie in C ein negativer Wert als Integer dargestellt wird, bei 16 Bit. Das 1. Zeichen ist ein Vorzeichen, ich bin davon ausgegangen, dass ich die Zahl ausrechne, z.B. 7 ist binär 111 umwandle und dann noch das vorzeichen von 0 auf 1 (steht für negativ) ändere. Jetzt hab ich im Selbststudium das Buch von H. Herold und W. Unger "C GESAMTWERK" gelesen. Hier wird erst die Zahl 7 binär dargestellt, dann wir invertiert. Durch meine Methode komm ich auf: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 <== -7 im Buch steht: 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 <== -7 Kann mir einer einen Grund erklären und warum es dann überhaupt ein Vorzeichenbit gibt. Bin um jede Antwort dankbar.

bei Antwort benachrichtigen
Andreas42 Kevin4 „Programmierung in C“
Optionen

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

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen