Pièges du jugement conditionnel des nombres signés et non signés

la description

  Dans le processus de programmation embarquée, les nombres non signés sont le contact le plus long, mais les nombres signés seront inévitablement rencontrés. Quand les nombres signés et les nombres non signés se rencontrent, une «métaphysique merveilleuse» se produira toujours. Et cette «métaphysique» causera des erreurs irréparables si vous ne faites pas attention.
  Regardez le morceau de code suivant

#include <stdio.h>
void main(void)
{
    
    
	unsigned int a = 5;
	int b = -5;
	if (a > b)
	{
    
    
		printf("a大于b\r\n");
	}
	else
	{
    
    
		printf("a不大于b\r\n");
	}
}

  Quelle sera la sortie de ce code? ? ?
Insérez la description de l'image ici
Intéressant, 5 n'est pas supérieur à -5. Le compilateur est-il stupide? Non, c'est parce que lorsqu'un nombre signé et un nombre non signé sont jugés conditionnellement, le compilateur convertit automatiquement implicitement le nombre signé en nombre non signé. À ce stade, -5 deviendra un nombre énorme non signé Entier, donc cela a provoqué une erreur de jugement logique.
Bien entendu, si le résultat des deux opérations est directement pris, le résultat est toujours correct.
Par conséquent, lorsque vous effectuez des jugements conditionnels, vous devez faire attention aux types de données des valeurs aux deux extrémités de l'opérateur conditionnel, afin d'éviter des erreurs de flux causées par des jugements, qui peuvent être fatales.

Je suppose que tu aimes

Origine blog.csdn.net/m0_38127906/article/details/108768751
conseillé
Classement