我正在使用Java开发一个Android 2.3.3应用程序。
我有以下代码:
为什么编译器需要将该值转换为short类型?short是带符号的16位整数数据类型吗?
我有以下代码:
short CRCAux = 0xffff;
在eclipse中,我得到了一个警告,要求我将这个值转换为short类型:
short CRCAux = (short) 0xffff;
我正在将一个iOS应用程序迁移到Android,在iOS中,CRCAux是UInt16类型。为什么编译器需要将该值转换为short类型?short是带符号的16位整数数据类型吗?
short
是一个带符号的 16 位值。0xffff 太大了,无法放入short
中。幸运的是,在 Java 中有一种无符号的 16 位类型:char
。(但有人可能会认为将char
用于数值类型有点滥用该类型)。 - Joachim Sauerchar
,我为什么不需要转换? - VansFannel2^15
的值中减去2^16
。通过这种嵌入方式,有符号加法等同于无符号加法;有符号乘法等同于无符号乘法;唯一有差异的操作是除法、模运算、>
、<
以及字符串之间的转换。 - Louis Wasserman