Heim > Backend-Entwicklung > C++ > Warum führt der Vergleich von -1 mit der Größe eines leeren Vektors zu „größer' in C?

Warum führt der Vergleich von -1 mit der Größe eines leeren Vektors zu „größer' in C?

Mary-Kate Olsen
Freigeben: 2024-12-07 22:42:14
Original
783 Leute haben es durchsucht

Why Does Comparing -1 to an Empty Vector's Size Result in

Warum der Vergleich von -1 mit der Größe eines Vektors von 0 zu „Größer“ führt

Das Rätsel

In C erzeugt das folgende Codefragment das unerwartete Ausgabe von „Größer“:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> a;
    std::cout << "vector size " << a.size() << std::endl;

    int b = -1;
    if (b < a.size())
        std::cout << "Less";
    else
        std::cout << "Greater";
}
Nach dem Login kopieren

Ausgabe:

vector size 0
Greater
Nach dem Login kopieren

Das Geheimnis lüften

Der Grund für dieses kontraintuitive Verhalten liegt im Typunterschied zwischen den verglichenen Werten. a.size() gibt eine vorzeichenlose Ganzzahl zurück, die die nicht negative Größe des Vektors darstellt. Andererseits ist b eine vorzeichenbehaftete Ganzzahl, die den negativen Wert -1 enthält.

Beim Vergleich dieser beiden Werte führt C eine implizite Heraufstufung auf vorzeichenlos durch. Infolgedessen wird b zu einer großen Ganzzahl ohne Vorzeichen heraufgestuft, die dann mit der vorzeichenlosen Zahl a.size() verglichen wird. Der große Wert ohne Vorzeichen überschreitet 0, was zur Ausgabe „Größer“ führt.

Ein verdeutlichendes Beispiel

Dieses Verhalten kann durch den folgenden Code weiter veranschaulicht werden:

#include <iostream>

int main()
{
    unsigned int a = 0;
    int b = -1;
    std::cout << std::boolalpha << (b < a) << "\n"; 
}
Nach dem Login kopieren

Ausgabe:

false
Nach dem Login kopieren

Hier vergleichen wir direkt einen vorzeichenlosen Typ (a) mit einem vorzeichenbehafteten Typ (b). Der negative Wert b wird zu einer großen Ganzzahl ohne Vorzeichen heraufgestuft, die zu Recht als größer als das vorzeichenlose a mit dem Wert 0 angesehen wird.

Fazit

Die Typunterschiede und die impliziten Heraufstufungsregeln sind zu verstehen entscheidend für die Arbeit mit vorzeichenbehafteten und vorzeichenlosen Werten in C . Beim Vergleich von Ganzzahlen unterschiedlichen Typs ist es wichtig, die Art und Weise zu berücksichtigen, in der sie hochgestuft werden, und ob der resultierende Vergleich sinnvoll ist.

Das obige ist der detaillierte Inhalt vonWarum führt der Vergleich von -1 mit der Größe eines leeren Vektors zu „größer' in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage