Comparaison négative avec un entier non signé positif ?
En C , nous rencontrons souvent des situations où des valeurs de différents types sont comparées. Cependant, comprendre comment ces comparaisons se comportent peut être délicat.
Considérez ce 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"; }
Le code affiche « Plus grand », même si « -1 » est clairement inférieur à « 0. " Pourquoi cela se produit-il ?
La clé réside dans les différents types de données impliqués. a.size() renvoie un entier non signé, tandis que b est un entier signé négatif. Lors de la comparaison de ces deux types, l’entier signé négatif est promu en entier non signé. Cela se traduit par une grande valeur non signée comparée à 0, qui est évidemment plus grande.
Pour illustrer cela davantage, regardons l'exemple suivant :
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints "false" }
Dans ce cas, le résultat est « faux », comme prévu. En effet, a et b sont tous deux promus en entiers non signés et "-1" est désormais une grande valeur non signée supérieure à 0.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!