binäre Darstellung in Turbo c
Frage
Ich habe eine sehr grundlegende Frage.Für den folgenden Code:
int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler
Sollte das negative Vorzeichen nicht einfach weggelassen werden oder werden die Grenzwerte umgangen?
Lösung
Das am häufigsten zur Darstellung negativer Zahlen verwendete Schema heißt Zweierkomplement.In diesem Schema -1
hat das Bitmuster von allen 1
Bits: 1111 1111 1111 1111
.Bei der Interpretation als vorzeichenlose Ganzzahl, was Ihre Umwandlung bedeutet, ist das 65535.
Mit anderen Worten: Es wird „einfach das negative Vorzeichen weggelassen“, außer dass dies einen anderen Effekt hat als erwartet.
Andere Tipps
Beim Konvertieren eines int
Zu unsigned int
, Wenn der Wert negativ ist, ist das Ergebnis so, als ob dieser negative Wert zu der Zahl hinzugefügt worden wäre, die größer als an ist unsigned int
kann halten.Dies wird durch den C-Standard seit C90 festgelegt und gilt unabhängig davon, ob die Maschine Zweierkomplement-, Einerkomplement- oder vorzeichenbehaftete Größendarstellungen verwendet.