为了账号安全,请及时绑定邮箱和手机立即绑定

使用 int 和 long 进行 Java 计算会返回带或不带括号的不同值。为什么?

使用 int 和 long 进行 Java 计算会返回带或不带括号的不同值。为什么?

茅侃侃 2022-07-27 10:06:21
这是问题的一个简单示例:public class IntVsLong {    public static void main(String[] args) {        int a = 3;        int b = 3;        long n = 549382313570L;        String s = "epsxyyflvrrrxzvnoenvpegvuonodjoxfwdmcvwctmekpsnamchznsoxaklzjgrqruyzavshfbmuhdwwmpbkwcuomqhiyvuztwvq";        System.out.println(a * n/s.length() + b); //returns 16481469410        System.out.println(a * (n/s.length()) + b); //returns 16481469408    }}第一种情况,不带括号,返回 16481469410。第二种情况,带括号,返回 16481469408。为什么?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

这是因为评估顺序不同,并且整数数学向下舍入。例如,用较小的数字来说明这一点。

3 * (5 / 2) = 3 * (2) = 6

不带括号

3 * 5 / 2 = 15 / 2 = 7

运算是从左到右计算的,没有括号,当你到达除法语句时,你会丢失一些信息,因为整数不能包含小数。通常,您越早丢失此信息最终结果就越不准确。


查看完整回答
反对 回复 2022-07-27
?
当年话下

TA贡献1890条经验 获得超9个赞

如果两个操作数都是整数类型,Java中的/操作符代表整数除法,意味着除法提示被丢弃。在您的情况下,结果之间的差异为 2,这意味着n/s.length()操作提醒大于2 / a且明显小于 1。因此,如果a * n/s.length()此提醒被乘以a并在答案中为您提供多余的 2。



查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信