Heim >Backend-Entwicklung >C++ >Warum ist -1 beim Vergleich von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen in C größer als 0?
Verstehen des Vergleichs negativer vorzeichenbehafteter Ganzzahlen mit vorzeichenlosen Ganzzahlen
Im bereitgestellten C-Programm ist es verwirrend, beim Vergleich von b die Ausgabe „Größer“ zu beobachten (-1) mit a.size() (0), obwohl -1 arithmetisch kleiner als 0 ist. Dieses unerwartete Verhalten ergibt sich aus dem Grundprinzip Unterschiede zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahltypen.
In diesem Fall gibt a.size() eine vorzeichenlose Ganzzahl zurück, die die Größe des Vektors angibt. Im Gegensatz dazu ist b eine ganze Zahl mit Vorzeichen. Beim Vergleich dieser beiden Werte wird das vorzeichenbehaftete b automatisch zu einem vorzeichenlosen Typ heraufgestuft. Diese Aktion wandelt -1 in einen großen Wert ohne Vorzeichen um, der 0 überschreitet.
Dieses Verhalten ist nicht auf Vektorgrößen beschränkt. Der folgende Codeausschnitt veranschaulicht das gleiche Problem:
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; }
Bei der Ausführung gibt dieser Code „false“ aus, was bedeutet, dass -1 im Kontext eines vorzeichenlosen Typs als größer als 0 betrachtet wird.
Um solche Verwirrung zu vermeiden, ist es wichtig, sich daran zu erinnern, dass vorzeichenbehaftete und vorzeichenlose Ganzzahlen unterschiedliche Verhaltensweisen haben und nicht gemischt werden sollten, ohne den beabsichtigten Vorgang sorgfältig abzuwägen.
Das obige ist der detaillierte Inhalt vonWarum ist -1 beim Vergleich von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen in C größer als 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!