Heim >Backend-Entwicklung >C++ >Warum führt der Vergleich einer negativen Ganzzahl mit einer vorzeichenlosen Ganzzahl in C zu unerwarteten Ergebnissen?
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!