Anomalie der Vektorgröße: Warum Size() - 1 für leere Vektoren nicht -1 ist
Der angegebene Codeausschnitt zeigt ein eigenartiges Verhalten in C-Vektoren. Wenn ein Vektor leer ist (d. h. size() == 0), ergibt das Subtrahieren von 1 von seiner Größe eine große positive Zahl anstelle der erwarteten -1.
Die Ursache
Der Schlüssel zum Verständnis dieses Verhaltens liegt im Datentyp von vector::size(). Es ist als size_t definiert, ein vorzeichenloser Ganzzahltyp. Im Gegensatz zu vorzeichenbehafteten Ganzzahlen können vorzeichenlose Ganzzahlen keine negativen Werte darstellen.
Der zweite Cout: Was passiert?
Wenn Sie 1 von der Größe eines leeren Vektors subtrahieren (die 0 ist) , das Ergebnis läuft über und wird auf den größtmöglichen Wert für eine vorzeichenlose Ganzzahl umgebrochen. Dies liegt daran, dass vorzeichenlose Ganzzahlen alle ihre Bits verwenden, um positive Werte darzustellen, und wenn sie überlaufen, beginnen sie von vorne bei 0.
Beispiel
Im Beispielcode Wert .size() ist 0 und value.size() - 1 läuft auf 18446744073709551615 über, was dem Maximum entspricht Wert für eine vorzeichenlose 64-Bit-Ganzzahl (2^64 - 1).
Das obige ist der detaillierte Inhalt vonWarum gibt „size() - 1' eine große positive Zahl für leere C-Vektoren zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!