nri*_*ilk 0 java casting long-integer
我正在用 Java 练习一些转换,但我遇到了一种情况,在任何地方都找不到任何答案。有很多类似的问题和答案,但没有一个给我这个特殊案例的解释。
当我做类似的事情时
long l = 165787121844687L;
int i = (int) l;
System.out.println("long: " + l);
System.out.println("after casting to int: " + i);
Run Code Online (Sandbox Code Playgroud)
输出是
long: 165787121844687
after casting to int: 1384219087
Run Code Online (Sandbox Code Playgroud)
这个结果对我来说非常有趣。
我知道long类型是64位整数,int类型是32位整数。我还知道,当我们将较大的类型转换为较小的类型时,我们可能会丢失信息。我知道有一个Math.toIntExact()方法非常有用。
但是这个“ 1384219087 ”输出的解释是什么?数据丢失了,但为什么是这个数字呢?“ 165787121844687 ”怎么变成了“ 1384219087 ”?为什么代码甚至可以编译?
就是这样。谢谢!
十六进制表示法的 165787121844687L = 0000 96C8 5281 81CF
\n十六进制表示法中的 1384219087 = 5281 81CF
\n因此,转换按预期截断了前 32 位。
\n 32-bits \n deleted \n \xe2\x96\xbc\xe2\x96\xbc\xe2\x96\xbc\xe2\x96\xbc \xe2\x96\xbc\xe2\x96\xbc\xe2\x96\xbc\xe2\x96\xbc\n165_787_121_844_687L = 0000 96C8 5281 81CF \xe2\x9e\xa3 1_384_219_087\n 64-bit long \xe2\x96\xb2\xe2\x96\xb2\xe2\x96\xb2\xe2\x96\xb2 \xe2\x96\xb2\xe2\x96\xb2\xe2\x96\xb2\xe2\x96\xb2 32-bit int \n \xc2\xa0 \xc2\xa032-bits \n remaining\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |