不兼容的类型错误Java和int之间的Java。不确定原因

时间:2012-04-14 22:09:36

标签: java bit-manipulation precision

在下面的代码中,我有一个错误 “可能会失去精确度 发现:int 要求:短“。 我理解错误意味着什么,但我只是想知道为什么我会得到它。当然这个函数应该返回一个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);
}

谢谢!

1 个答案:

答案 0 :(得分:16)

short上的Java算术运算总是返回int,部分是为了防止溢出,部分是为了反映基础JVM字节码,它不区分int上的算术运算, shortbyte。但基本上,(payload[offset - 2] << 8 & 0xff00)是一个int,它希望你把它重新缩短。