2010-11-18 2 views
0

Je souhaite initialiser un short en valeur hexadécimale, mais mon compilateur me donne des avertissements de troncature. Clairement, il pense que j'essaie de mettre le short à une valeur positive.Éviter les avertissements de troncature de mon compilateur C++ lors de l'initialisation des valeurs signées

short my_value = 0xF00D; // Compiler sees "my_value = 61453" 

Comment éviter cet avertissement? Je pouvais utiliser une valeur négative,

short my_value = -4083; // In 2's complement this is 0xF00D 

mais dans mon code, il est beaucoup plus compréhensible pour utiliser hexadécimal.

+5

Si vous essayez d'attribuer quelque chose avec le jeu de bits le plus haut, est-ce vraiment un court métrage? ou devriez-vous utiliser un court non signé? –

+0

Bon point, Paul. –

Répondre

3

Jette la constante.

short my_value = (short)0xF00D;

EDIT: explication initiale avait un sens dans ma tête, mais après mûre réflexion était une sorte de mal. Pourtant, cela devrait supprimer l'avertissement et vous donner ce que vous attendez.

+0

J'utilise C++ alors j'ai essayé une static_cast, mais j'ai quand même l'avertissement. Peut-être que je suis supposé utiliser reinterpret_cast? –

+0

En utilisant un casting de style C se débarrasser de l'avertissement, merci. Maintenant, j'ai besoin de lire pourquoi il n'y a pas de distribution en style C++ pour gérer ce scénario. –

+1

Vous pourriez 'court (0xF00D)', qui est un peu plus de style C++. Le problème est qu'il n'y a pas de littéral entier pour spécifier un 'short int' comme pour un 'long'. –

0

Vous attribuez une valeur int qui ne peut pas être courte, d'où l'avertissement. Vous pouvez faire taire le compilateur en utilisant une distribution de type c, mais c'est généralement une mauvaise pratique.

Il vaut mieux ne pas le faire et affecter une valeur négative. Ou, si la valeur hexadécimale a plus de sens, passer à unsigned short.

Questions connexes