14Fermer16
ZerosquareLe 25/08/2012 à 13:31
Folco (./14) :
Yep, mais j'ai toujours un peu de mal avec les mécanismes de cast et surtout de promotion.
Le cast pour les entiers n'est pas bien complexe :
- si tu castes vers un type qui a le même nombre de bits, les bits sont préservés tels quels (donc un cast unsigned truc vers signed truc ne modifie pas les données, juste leur interprétation ; ça veut dire qu'il y aura un wraparound si tu essaies de convertir un nombre négatif en unsigned, ou un nombre trop grand en signed)
- si tu castes vers un type qui a davantage de bits, les bits supplémentaires de gauche sont mis à zéro si le type source est unsigned, ou remplis avec le bit de signe si le type source est signed.
- si tu castes vers un type qui a moins de bits, les bits en trop à gauche sont simplement tronqués.

En pratique, ça a pour effet que si la valeur d'origine est représentable dans le type destination, la valeur est conservée. Sinon, elle sera fausse évidemment, mais tu conserves les bits existants autant que possible.

(c'est de mémoire, mais mon K&R est resté au boulot hehe)

Pour la promotion, goto K&R, parce que j'ai toujours un doute et que je ne veux pas raconter de conneries tongue
(et je ne suis pas le seul visiblement, les règles de codage MISRA utilisées pour les systèmes sécuritaires mettent explicitement en garde contre les risques de la promotion et le fait que beaucoup de programmeurs n'y font pas attention)