Qu'advient-il si je attribuer une valeur négative pour un unsigned variable?

J'étais curieux de savoir ce qui se passerait si je attribuer une valeur négative pour un unsigned variable.

Le code est un peu comme cela.

unsigned int nVal = 0;
nVal = -5;

Il ne m'a laissé aucune erreur de compilation. Quand j'ai couru le programme de la nVal a été affecté à une étrange valeur! Se pourrait-il que certains 2 en complément à valeur sera affectée à nVal?

  • Mon intuition (n'ont pas été en mesure de le trouver dans la norme encore) c'est que le comportement est techniquement pas défini. En outre, je pense que vous verrez ce que vous attendez sur pratiquement n'importe quel compilateur, vous pouvez trouver. Ainsi, alors que vous aurez l'habitude de voir ce comportement, il est probablement pas une bonne idée de compter sur elle.
  • Il n'est pas non défini (voir §4.7/2), mais la représentation (par exemple 2s compléter) n'est pas mandaté par la norme.
  • al-dessous), c'est cool. Ressemble le comportement est, en effet, explicitement définies à être ce que vous attendiez, @viswanathan.
  • La deuxième ligne est équivalente à nVal = (unsigned int) -5;. Le casting de -5 à unsigned int est défini dans 6.3.1.3. La représentation en 2s complément n'est pas prescrite par la norme, mais l'algorithme de conversion non signé est: "la valeur est convertie à plusieurs reprises en ajoutant ou en soustrayant un de plus que la valeur maximale qui peut être représenté dans le newtype jusqu'à ce que la valeur est dans la gamme de la newtype."
  • Où avez-vous trouvé?
  • Vous semblez faire allusion à C99, mais la question est étiqueté C++.
  • Oups, désolé. Je retire mon commentaire. J'étais en effet en supposant que le C99.

InformationsquelleAutor ckv | 2010-04-26