long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);
maxSpace = 20000
usedSpace = 8
--> freeSize = -1482836480
为什么这个结果是负的?
最佳答案
将 maxSpace
和 usedSpace
的类型从 int
更改为 long
。如果你不能这样做,那么只需将你的代码更改为类似
long freeSize = 1000L*1000*(Main.maxSPace - Main.usedSpace);
因此结果将被计算为 long
,而不是 int
。
现在是这样计算的
Main.maxSPace-Main.usedSpace -> 19992
(Main.maxSPace-Main.usedSpace)*1000 -> 19992000
(Main.maxSPace-Main.usedSpace)*1000*1000L -> 19992000000
这里的问题是我们对整数进行操作,所以结果也必须是整数,但是整数的最大值是
2147483647 so
19992000000 is out of range
因此 Java 将只取结果的最后 32 位并将其更改为整数
10010100111100111011011011000000000 -> 19992000000
10100111100111011011011000000000 -> -1482836480
关于java - 减多头出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890512/