java - 减多头出错

标签 java long-integer

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

maxSpace = 20000
usedSpace = 8

--> freeSize = -1482836480

为什么这个结果是负的?

最佳答案

maxSpaceusedSpace 的类型从 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/

相关文章:

java - 使用 apache.math3.stat.descriptive 的百分位数计算不匹配

java - 如何修复该程序中的编译器错误?

java - 如何使用 ssjs 数组变量设置组合框的值?

java - servlet 中 "response.setContentType("text/html")"的用途是什么

java - Python 与 Java 和 C 中的长类型

c++ - long 不等于 C++ 中的另一个 long

java - Android 应用程序部署在 Eclipse 上创建重复项

json - 如何使用 JAXB 将长属性作为 JSON 字符串值返回

Django rq 做批量数据库插入

c++ - 如何收集和存储tellp()、tellg()返回类型?