java - Java 中 long 原始类型的范围

标签 java

我在 documentation 找到了long 的范围是从 -2^63 到 2^63-1。

当我运行这个循环时,我无法克服 cca 2 000 000 000。

Log.d(TAG, "Long MAX = " + Long.MAX_VALUE);
for (int i = 1; i < 45; i++) {
    long result = i * 184528125;
    Log.d(TAG, "" + result);
}

输出为“Long MAX = 9223372036854775807”,结果值如下图所示。

graph of previous for cycle

codingground.com 上的示例 Java 项目是 here .

我错过了什么?

最佳答案

这一行是错误的:

long result = i * 184528125;

它将两个 32 位 int 值相乘。结果将是 32 位 int(已溢出),然后将其转换为 64 位 long

您想改用 64 位乘法。将两个操作数之一设为 long。最简单的方法是在常量上使用 L 后缀:

long result = i * 184528125L;

关于java - Java 中 long 原始类型的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325023/

相关文章:

java - 为什么 Java NIO.2 中的异步 channel 需要这些暂停?

java - 如何暂停和恢复安卓游戏?

java - Selenium 驱动程序中的随机警报,我该如何处理?

java - 我需要在未映射的父类(super class)属性上使用 @Transient 注释吗?

java - 当 http 连接超时时为 TextView 设置文本

java - 测量线程之间的计算时间 - java

java - 什么会导致 java.lang.ClassNotFoundException : [B?

java - eclipse 错误导出插件

java - AES 解密的 3gp 文件似乎已损坏

java - 获取在 Android 中使用应用程序的总 RAM 大小