8

次のコードでは、「精度が失われる可能性があります: int が必要です: short」というエラーが表示されます。エラーの意味は理解できますが、なぜエラーが発生するのか疑問に思っています。確かに、関数は short 型を返すはずです (どのように精度が失われるのかわかりません。コードは 16 ビット整数を返す必要があります)。次のコードが型 int を必要とするように見える理由を誰かが私に説明できますか?

static short a() {
    short[] payload = {
            100, 200, 300,
            400, 500, 600,
            700, 800, 900, 1000
    };
    short offset = 2;
    return (payload[offset - 2] << 8 & 0xff00) + (payload[offset - 1] & 0xff);
}

ありがとう!

4

1 に答える 1

16

Java の算術演算はshort常に を返します。これは、一部はオーバーフローを防止するのに役立ち、一部は基になる JVM バイトコードを反映するためです。これは、 、、またはintの算術演算を区別しません。しかし、基本的には であり、それを短いものに戻す必要があります。intshortbyte(payload[offset - 2] << 8 & 0xff00)int

于 2012-04-14T22:12:32.893 に答える