有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的长基元类型范围

我在documentation中发现,长的范围是从-2^63到2^63-1

当我运行这个循环时,我无法超过CCA2000

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上的示例Java项目。com是here

我错过了什么


共 (3) 个答案

  1. # 1 楼答案

    263不能被184528125整除。用这种方法可以得到的最接近的数字是49983556906*184528125=9223372036694981250

    如果你登录。d(“+0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

  2. # 2 楼答案

    long result = i * 184528125;

    上述声明就是罪魁祸首。默认情况下,数值为int。您还将i定义为int

    选项:

    1. i定义为long
    2. long修饰符L添加到184528125
  3. # 3 楼答案

    你在这里做数学题:

    long result = i * 184528125;
    

    。。。因为i是一个int,默认情况下,数字文本是int。因此,首先发生i * 184528125,限制在int范围内,然后结果(如您所发现的那样,它是包装的)被提升到long并分配给result

    相反,要么将i设为long,要么将数值文本设为长文本:

    long result = i * 184528125L;
    // Note -------------------^
    

    现在乘法发生在long值上,可以访问完整的long范围