Maison > développement back-end > C++ > Pourquoi comparer un entier négatif à un entier non signé en C donne-t-il des résultats inattendus ?

Pourquoi comparer un entier négatif à un entier non signé en C donne-t-il des résultats inattendus ?

Linda Hamilton
Libérer: 2024-12-08 04:34:10
original
631 Les gens l'ont consulté

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

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";
}
Copier après la connexion

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"
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal