Abweichung der Vektorgröße mit leerem Vektor in C
Bedenken Sie den folgenden Code:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
Der Code gibt 0 aus für den ersten cout, was wie erwartet einen leeren Vektor anzeigt. Der zweite Zähler gibt jedoch eine große positive Zahl aus (18446744073709551615). Warum ist es nicht -1, wie man intuitiv erwarten könnte?
Vorzeichenlose Typen verstehen
Um dieses Verhalten zu verstehen, müssen wir den Typ der Vektorgröße berücksichtigen Funktion. vector::size() gibt einen size_t-Wert zurück, der ein vorzeichenloser Datentyp ist. Vorzeichenlose Datentypen können nur positive Zahlen und 0 darstellen. Negative Zahlen können mit diesen Typen nicht dargestellt werden.
Wenn wir 1 von der Größe eines leeren Vektors subtrahieren, erhalten wir wie erwartet den Wert -1. Da size_t jedoch ohne Vorzeichen ist, läuft der Wert -1 auf den größten positiven Wert über, den dieser Datentyp darstellen kann, in diesem Fall 18446744073709551615.
Daher zeigt die zweite cout-Anweisung eher das Ergebnis dieses Überlaufs an als der erwartete -1-Wert.
Das obige ist der detaillierte Inhalt vonWarum führt das Subtrahieren von 1 von der Größe eines leeren Vektors in C zu einer großen positiven Zahl anstelle von -1?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!