减去多头出错了

bbh*_*zbb 7 java long-integer

long freeSize = ((Main.maxSPace-Main.usedSpace)*1000*1000);

maxSpace = 20000
usedSpace = 8
Run Code Online (Sandbox Code Playgroud)

- > freeSize = -1482836480

为什么结果是否定的?

Psh*_*emo 6

更改的类型maxSpaceusedSpaceintlong.如果你不能这样做,那么只需将代码更改为类似的代码

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)