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”,图中的结果值如下
codingground上的示例Java项目。com是here
我错过了什么
# 1 楼答案
263不能被184528125整除。用这种方法可以得到的最接近的数字是49983556906*184528125=9223372036694981250
如果你登录。d(“+0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# 2 楼答案
long result = i * 184528125;
上述声明就是罪魁祸首。默认情况下,数值为
int
。您还将i
定义为int
选项:
i
定义为long
long
修饰符L
添加到184528125
# 3 楼答案
你在这里做数学题:
。。。因为
i
是一个int
,默认情况下,数字文本是int
。因此,首先发生i * 184528125
,限制在int
范围内,然后结果(如您所发现的那样,它是包装的)被提升到long
并分配给result
相反,要么将
i
设为long
,要么将数值文本设为长文本:现在乘法发生在
long
值上,可以访问完整的long
范围