我正在缩小范围并检查以下代码: -
int i = 131072;
short s = (short)i;
System.out.println(s); //giving 0
Run Code Online (Sandbox Code Playgroud)
这种缩小正在输出0.我无法理解背后的逻辑.
131072int是00000000 00000010 00000000 00000000二进制的.
当你考虑它时short,只剩下最低的16位 - 00000000 00000000.
将基元转换为较小的基元时,顶部位被删除.
写另一种方式,你可以看到发生了什么.
int i = 0x20000;
short s = (short) (i & 0xFFFF);
Run Code Online (Sandbox Code Playgroud)
注意:整数的低16位都是零,所以答案是0.
二进制转换为(short)仅保留低16位.
00000000 00000010 (00000000 00000000)
Run Code Online (Sandbox Code Playgroud)
如果要输出更长的数字,在每种情况下仍然需要较低的位数.注意:&在每种情况下都是多余的,只是为了清晰起见.
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |