gpt4 book ai didi

java - Java 中的长除法没有按预期工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:16 29 4
gpt4 key购买 nike

class LongDiv{
public static void main(String [] args){

final long x = 24*60*60*1000*1000;
final long y = 24*60*60*1000;
System.out.println(x/y);
}
}

虽然预期的答案是 1000,但 javac 给出的答案是 5。原因是什么?

最佳答案

您创建的长 x 不是您期望的值。它在整数范围内。要创建多头,请使用:

final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);

您在整数范围内计算的 x5006540​​80。除以 y(= 86400000),得到 5.794607407407407...。 Java 截断了导致 5 的小数部分。

通过在数字文字后添加 L,您告诉编译器将其编译为 long 而不是 int。您期望的 x 的值为 86400000000。但是它被编译为一个 int。

我们可以通过将 x (5006540​​80) 截断为 int 来重现错误值:

// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */

关于java - Java 中的长除法没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766120/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com