Je ne sais plus comment il joue avec le bit de poids fort lorsqu'il passe d'un signé à un non-signé plus long,
En C, les conversions se font toujours en essayant de préserver la valeur. Si la valeur de départ "tient" dans le type d'arrivée, alors elle est conservée telle quelle. Sinon, ça dépend... Dans le cas d'une conversion vers un type non signé, la conversion se fait modulo (le nombre maximal représentable par ce type) + 1 (i.e. UINT_MAX +1 dans le cas d'unsigned int).
Donc, si la valeur de v est négative, la conversion en unsigned int se fera avec un changement de valeur modulo UINT_MAX +1. Sinon, comme on a par ailleurs SHORT_MAX <= INT_MAX <= UINT_MAX, la valeur après conversion sera identique. Pas besoin de jouer avec les opérateurs binaires...
[^] # Re: un petit endien .. nagawika ...
Posté par alf . En réponse au message Lecture de fichier binaire. Évalué à 1.
En C, les conversions se font toujours en essayant de préserver la valeur. Si la valeur de départ "tient" dans le type d'arrivée, alors elle est conservée telle quelle. Sinon, ça dépend... Dans le cas d'une conversion vers un type non signé, la conversion se fait modulo (le nombre maximal représentable par ce type) + 1 (i.e. UINT_MAX +1 dans le cas d'unsigned int).
Donc, si la valeur de v est négative, la conversion en unsigned int se fera avec un changement de valeur modulo UINT_MAX +1. Sinon, comme on a par ailleurs SHORT_MAX <= INT_MAX <= UINT_MAX, la valeur après conversion sera identique. Pas besoin de jouer avec les opérateurs binaires...
En passant, il sert à quoi ton assert ?