Maison >développement back-end >C++ >Pourquoi `(-2147483648 > 0)` est-il évalué à True en C ?
0)` Évaluer à True en C ? " />
Pourquoi (-2147483648 > 0) renvoie-t-il True en C ?
Cet article explore un comportement déroutant en C où l'expression (-2147483648 > ; 0) est évalué de manière inattendue à vrai.
-2147483648, le plus petit entier de 32 bits, est représenté comme une valeur positive avec l'opérateur unaire - appliqué. Cependant, sur les plates-formes où long int et long long int n'ont pas une plage plus grande que int, ceci. la valeur déborde du côté positif de la plage entière.
En conséquence, le compilateur traite 2147483648 en tant que valeur négative dépendante de l'implémentation. Cette valeur négative devient positive après l'application de l'opérateur unaire -, ce qui entraîne l'évaluation de l'expression comme étant vraie.
Alternativement, l'implémentation peut utiliser des types non signés pour représenter la valeur, ce qui conduit à le même résultat. Ce comportement n'est pas défini en C , et les implémentations sont libres d'interpréter le débordement de la manière qu'elles jugent appropriée.
Pour éviter de telles anomalies, les constantes comme INT_MIN sont généralement définies comme (-2147483647 - 1) au lieu de -2147483648, garantissant qu'elles représentent correctement la valeur entière minimale.
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!