(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.
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hi,
ob es sich um ein signed oder unsigned int handelt, sieht man an der BitKombination nicht.
Angenommen Du hast ein signed int:
Wertebereich von -32768 bis 32767.
Wenn du das ganze jetzt einem unsigned int zuweist, reicht der Wertebereich von 0 bis 65535.
Die Bits sind immer noch die gleichen. Nur das jetzt ein anderer Wert rauskommt.
Dieses Bit heißt zwar Vorzeichenbit (signed int), hat aber nicht viel damit zu tun. Ist es gesetzt, dann weiß derjenige, der es ausliest, dass die Zahl negativ ist.
Bei unsigned int weiß er dagegen, dass die Zahl oberhalb von 32767 liegt.
Bei den signed ints kann man ganz einfach in den negativen Bereich fallen: Du weist der Variable den Wert 32766 zu. Dann addierst Du drei mal die eins dazu, läßt Dir jedesmal den Wert ausgeben und voilá: Falsches Vorzeichen!
Das mit dem invertieren geht halt am schnellsten, um eine negative Zahl darzustellen.