0xFFFF需要转换为short吗?

时间:2012-07-17 13:57:19

标签: java android types

我正在使用Java开发Android 2.3.3应用程序。

我有以下代码:

short CRCAux = 0xffff;

我在eclipse中收到警告,我必须将此值强制转换为简短:

short CRCAux = (short) 0xffff;

我正在将iOS应用程序迁移到Android,而在iOS中,CRCAuxUInt16

为什么编译器需要将该值转换为short?是否为带符号的int 16位数据类型?

1 个答案:

答案 0 :(得分:4)

java编译器假定像0xFFFF这样的文字是int类型。所以它非常正确你在这里得到警告,因为int值0x0000FFFF不适合短路(编译器不知道你不关心在这种特殊情况下截断上部零)。

在这种情况下,如果将16位值写为有符号值,编译器将接受它而不进行强制转换:

  

短CRCAux = -1;

short类型可以用来存储uint16的值(16位二进制补码毕竟只有16位,只是解释这些位的问题)。

也就是说,因为java假定那些16位代表一个带符号的二进制补码数。你会得到与许多运算符非常不同的语义(移位,乘/除和更大/更小的比较)。除非你确切地知道你正在做什么,否则很可能会破坏你移植的代码。 Char在这种情况下更适合,因为它提供了所需的“无符号”行为。