我正在努力缩小范围,并检查了以下代码:-
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] 删除。
我来说两句