Attribuer des valeurs négatives à des variables non signées : que se passe-t-il ?
En C, si vous essayez d'attribuer une valeur négative à une variable non signée, tels que :
unsigned int nVal = 0; nVal = -5;
le comportement peut être perplexe.
L'explication
Selon la section 4.7 conv.integral de la norme C :
"Si le type de destination n'est pas signé, le résultat la valeur est le plus petit entier non signé congru à l'entier source (modulo 2n où n est le nombre de bits utilisés pour représenter le type non signé)."
Dans la représentation en complément à deux (que la plupart des processeurs modernes utilisent), cela signifie qu'il n'y a pas de changement réel dans le modèle de bits s'il n'y a pas de troncature. . Le résultat est la valeur équivalente à (-5 232), ou 4294967291. En effet, la représentation en complément à deux de -5 est la même que la représentation au niveau du bit de 4294967291.
En bref, attribuer une valeur négative à une variable non signée n'entraîne pas de débordement ou d'exception. Au lieu de cela, il revient à la valeur positive non signée équivalente.
Remarque :
Bien que ce comportement soit bien défini en C , il n'est pas largement compris. Il est important d'être conscient de ce piège potentiel lorsque vous travaillez avec des variables non signées.
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!