这个问题不是关于如何将long正确地转换为int,而是当我们错误地将它转换为int时会发生什么.
所以考虑这个代码 -
@Test
public void longTest()
{
long longNumber = Long.MAX_VALUE;
int intNumber = (int)longNumber; // potentially unsafe cast.
System.out.println("longNumber = "+longNumber);
System.out.println("intNumber = "+intNumber);
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出 -
longNumber = 9223372036854775807
intNumber = -1
Run Code Online (Sandbox Code Playgroud)
现在假设我做了以下更改 -
long longNumber = Long.MAX_VALUE - 50;
Run Code Online (Sandbox Code Playgroud)
然后我得到输出 -
longNumber = 9223372036854775757
intNumber = -51
Run Code Online (Sandbox Code Playgroud)
问题是,long的值如何转换为int?
Lou*_*man 38
低32位long被采取并放入int.
不过这是数学:
long视为2^64加上该值.因此-1被视为2 ^ 64 - 1.(这是无符号的 64位值,它实际上是以二进制表示的值.)int.)| 归档时间: |
|
| 查看次数: |
14878 次 |
| 最近记录: |