Heim >Backend-Entwicklung >C++ >Warum führt der Vergleich einer negativen Ganzzahl mit einer vorzeichenlosen Ganzzahl in C zu unerwarteten Ergebnissen?

Warum führt der Vergleich einer negativen Ganzzahl mit einer vorzeichenlosen Ganzzahl in C zu unerwarteten Ergebnissen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-08 04:34:10624Durchsuche

Why Does Comparing a Negative Integer to an Unsigned Integer in C   Yield Unexpected Results?

Negativer Vergleich mit positivem Unsigned Int?

In C stoßen wir häufig auf Situationen, in denen Werte unterschiedlichen Typs verglichen werden. Es kann jedoch schwierig sein, das Verhalten dieser Vergleiche zu verstehen.

Bedenken Sie diesen Code:

#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";
}

Der Code gibt „Größer“ aus, obwohl „-1“ eindeutig kleiner als „0“ ist. " Warum passiert das?

Der Schlüssel liegt in den verschiedenen beteiligten Datentypen. a.size() gibt eine Ganzzahl ohne Vorzeichen zurück, während b eine Ganzzahl mit negativem Vorzeichen ist. Beim Vergleich dieser beiden Typen wird die Ganzzahl mit negativem Vorzeichen in eine Ganzzahl ohne Vorzeichen heraufgestuft. Dies führt dazu, dass ein großer vorzeichenloser Wert mit 0 verglichen wird, was offensichtlich größer ist.

Um dies weiter zu veranschaulichen, schauen wir uns das folgende Beispiel an:

#include <iostream>

int main() {
    std::cout << std::boolalpha;
    unsigned int a = 0;
    int b = -1;
    std::cout << (b < a) << "\n";  // prints "false"
}

In diesem Fall das Ergebnis ist wie erwartet „falsch“. Dies liegt daran, dass sowohl a als auch b zu vorzeichenlosen Ganzzahlen heraufgestuft werden und „-1“ jetzt ein großer vorzeichenloser Wert ist, der größer als 0 ist.

Das obige ist der detaillierte Inhalt vonWarum führt der Vergleich einer negativen Ganzzahl mit einer vorzeichenlosen Ganzzahl in C zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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