Question

Je reçois un avertissement ici. L'avertissement indique que «la conversion entière entraîne une troncature». Il persiste même si je supprime le TypeCast (U16).

typedef unsigned short  U16;
U16 mask;
mask = ~(U16)(0x8000);

Comment résoudre cet avertissement? J'ai utilisé le code ci-dessous et supprimé l'avertissement, mais je ne sais pas si c'est la bonne façon de le faire.

mask = (U16)(~(U32)(0x8000));

Merci d'avance!

Était-ce utile?

La solution

Les compilateurs C n'aiment pas lorsque vous essayez d'attribuer des valeurs constantes dans une valeur en L qui n'est pas assez grande pour les maintenir. Je suppose que les auteurs du compilateur supposent que vous savez quelle valeur doit être utilisée car vous déclarez une constante, donc quelque chose doit être mal si vous tronquez potentiellement sa valeur. Voici une solution qui fonctionnera, mais n'est peut-être pas votre résultat idéal:

typedef unsigned short  U16;
U16 mask;
mask = 0x7fff; //~0x8000;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top