2017-03-16 8 views
0

でショートにしては0xffffを置くことができない、私は短い覚え16ビット値であり、そしてすべての文字は4ビットの値であるので、私は0xffffを考えますを入れることができますshort、 しかし、それはできません、なぜですか?は、なぜ私はこのようなタイトルなどのJava

答えて

0

0xffffのリテラルintであるため、この割り当ては失敗します。

short s = 0xffff; 

あなたはそれを動作させるためにshortにキャストする必要があります。

short s = (short) 0xffff; 

shortが署名したタイプですので、あなたがかもしれないことを覚えておいてくださいあなたが期待する価値を得ることはできません。 16進数0xffffは、数字-1を表します。

System.out.println((short) 0xffff); // Prints -1. 
+0

しかし、短くキャストすると間違った値(オーバーフロー)が発生します。 – codenut

+0

です。 _wrong_かどうかは、彼が何を期待しているかによって変わりますが) – marstran

+0

ありがとう! @@@@@ –

-1

0xffffはintの形式であり、shortにキャストする必要があるためです。ジャワshort

short s= (short)0xffff; 
+2

いつか、IDEやコンパイラからエラーメッセージを読むのは良いことです。多くの時間を節約します... – Vadim

+0

本当に..あなたは 'short s = 0xfff'を持つことができ、すべてがうまくいくでしょう! –

+0

特に3fを必要とする代わりに4 ... – Vadim

4

署名さデータ型です。したがって、すべてのビットが設定された値は-1です。私はこれがあなたが望むものであるとは思っていません...

+0

ありがとうございます! @@@@@ –

0

私は答えを見つけました、整数は署名されたデータ型です、そして少しビットがSign 8ビットを持って、実際には私たちの日付を保存するために7ビットを使用することができます、ありがとうすべての答えは、ありがとう!

関連する問題