2010-11-18 5 views
0

shortを16進値に初期化したいが、私のコンパイラで切り捨ての警告が表示される。明らかに私はshortを正の値に設定しようとしていると考えています。符号付きの値を初期化するときにC++コンパイラから切り捨て警告が発生しないようにする

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

この警告を回避するにはどうすればよいですか?

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

しかし、私のコードでは、16進数を使用するほうがはるかに分かりやすいです。

+5

トップビットセットに何かを割り当てようとしているのなら、それは本当に短いのでしょうか?または符号なしのshortを使用する必要がありますか? –

+0

良い点、ポール。 –

答えて

3

定数をキャストします。

short my_value = (short)0xF00D;

EDIT:初期の説明は、私の頭の中で意味があったが、さらに反射に一種の間違っていました。それでも、これは警告を抑制し、あなたが期待するものを与えるべきです。

+0

私はC++を使用しているので、static_castを試しましたが、まだ警告が表示されます。 reinterpret_castを使うべきでしょうか? –

+0

Cスタイルのキャストを使用して警告を取り除いた、ありがとう。今、私はこのシナリオを扱うためにC++スタイルのキャストがない理由を読み上げる必要があります。 –

+1

もう少しC++スタイルの 'short(0xF00D)'を使うことができます。問題は 'long'のように' short int'を指定する整数リテラルがないことです。 –

0

shortに収まらないint値を割り当てるため、警告が表示されます。 C型キャストを使用してコンパイラをサイレントにすることはできますが、通常は悪い方法です。

より良い方法は、それを行うことではなく、負の値を割り当てることです。または、16進値が意味をなさない場合は、unsigned shortに切り替えることができます。

関連する問題