Heim > Backend-Entwicklung > C++ > Warum ist -1 beim Vergleich von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen in C größer als 0?

Warum ist -1 beim Vergleich von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen in C größer als 0?

Barbara Streisand
Freigeben: 2024-12-11 02:04:14
Original
840 Leute haben es durchsucht

Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C  ?

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"; 
}
Nach dem Login kopieren

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!

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