从int到short的缩小

安吉尼加姆

我正在努力缩小范围,并检查了以下代码:-

int i = 131072;
short s = (short)i;
System.out.println(s); //giving 0

这种缩小正在输出0我无法理解背后的逻辑。

彼得·劳瑞

当您将图元转换为较小的图元时,会丢弃最高位。

用另一种方式写,您可以看到正在发生的事情。

int i = 0x20000;
short s = (short) (i & 0xFFFF);

注意:整数的低16位全为零,因此答案为0。

由于二进制转换为(short)仅保留低16位。

00000000 00000010 (00000000 00000000)

如果要强制转换一个较大的数字,则在每种情况下仍将占用较低的位。注意:&在每种情况下,都是多余的,仅用于帮助澄清。

long l = 0x0FEDCBA987654321L;

// i = 0x87654321
int i = (int) (l & 0xFFFFFFFFL);

// c = \u4321
char c = (char) (l & 0xFFFF);

// s = 0x4321
short s = (short) (l & 0xFFFF);

// b = 0x21
byte b = (byte) (l & 0xFF);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章