long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
Run Code Online (Sandbox Code Playgroud)
- > freeSize = -1482836480
为什么结果是否定的?
更改的类型maxSpace
和usedSpace
从int
到long
.如果你不能这样做,那么只需将代码更改为类似的代码
long freeSize = 1000L*1000*(Main.maxSPace - Main.usedSpace);
Run Code Online (Sandbox Code Playgroud)
所以结果将被计算为long
,而不是int
.
现在它是这样计算的
Main.maxSPace-Main.usedSpace -> 19992
(Main.maxSPace-Main.usedSpace)*1000 -> 19992000
(Main.maxSPace-Main.usedSpace)*1000*1000L -> 19992000000
Run Code Online (Sandbox Code Playgroud)
这里的问题是我们对整数进行操作,因此结果也必须是整数,但整数的最大值是
2147483647 so
19992000000 is out of range
Run Code Online (Sandbox Code Playgroud)
所以Java将只取最后32位的结果并将其更改为整数
10010100111100111011011011000000000 -> 19992000000
10100111100111011011011000000000 -> -1482836480
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7118 次 |
最近记录: |