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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top