xcv*_*cvd 8 java precision bit-manipulation
在下面的代码中,我有一个错误"可能发现精度损失:int required: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);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Lou*_*man 16
Java的算术运算上short总是返回int,部分是为了防止溢出,部分反映底层JVM字节码,这并不算术操作之间的区别int,short或者byte.但基本上,(payload[offset - 2] << 8 & 0xff00)是一个int,它希望你把它重新缩短.