C++ - Vorzeichenlose Ganzzahlen

Habe ich Folgendes Programm geschrieben in C++:

Das problem mit diesem Programm ist, dass, wenn der Benutzer Eingänge einer negativen Zahl, es ist NICHT gefangen von der Linie if(!cin). Ich dachte, dass unsigned-Ganzzahlen können NICHT akzeptieren, dass negative zahlen. Warum dann, wenn ich eine negative Zahl eingeben, um die Größe, es ist NICHT gefangen von if(!cin) und das Programm setzt die Ausführung Fort, ohne Fehlermeldungen?

Ich nicht nutzen kann if(size < 0). Ich will zeigen, wie vorzeichenlose Ganzzahlen lösen das problem des negativen input.

  • warum nicht int size; ?
  • Können Sie nicht, geben Sie die Daten in eine vorzeichenbehaftete Ganzzahl, machen Sie eine Prüfung und dann weisen Sie ihn in eine vorzeichenlose ein?
  • Ich bin an einem Projekt arbeiten, die untersuchen, wie bestimmte Sicherheitslücken können gemildert werden. Derzeit bin ich untersucht integer-overflows und gelesen, dass wenn Sie die Programmierung und benötigen Sie nicht negative zahlen, können Sie Gebrauch machen von vorzeichenlosen Ganzzahlen, und das problem ist gelöst.
  • Allerdings, wenn ich versuche bei der Eingabe eine negative Zahl im unsigned-integer-Größe, ist es immer noch akzeptiert :s
  • Sie verwechseln zwei verschiedene Dinge. Es ist wahr, dass eine Zahl ohne Vorzeichen, können niemals einen negativen Wert. Es ist nicht wahr, dass es eine negative Zahl ist keine gültige externe Repräsentation einer Zahl ohne Vorzeichen. Also da ein 32-bit-Ganzzahl ohne Vorzeichen "-1" gelesen werden, als der Wert 0xFFFFFFFF
  • Danke, John. Jetzt verstehe ich. So zahlen ohne Vorzeichen nehmen kann negative zahlen, aber diese werden immer dargestellt als positiv.

InformationsquelleAutor Matthew | 2012-10-18
Schreibe einen Kommentar