java算术
发布时间:2020-12-15 05:17:00 所属栏目:Java 来源:网络整理
导读:为什么这段代码返回错误的值? int i=Integer.MAX_VALUE+1;long l=Integer.MAX_VALUE+1;System.out.println(l);System.out.println(i); 解决方法 向Integer.MAX_VALUE添加1时,它会溢出并回绕到Integer.MIN_VALUE. 发生这种情况是因为Java使用two’s compleme
为什么这段代码返回错误的值?
int i=Integer.MAX_VALUE+1; long l=Integer.MAX_VALUE+1; System.out.println(l); System.out.println(i); 解决方法
向Integer.MAX_VALUE添加1时,它会溢出并回绕到Integer.MIN_VALUE.
发生这种情况是因为Java使用two’s complement来表示整数. 4位示例: 0000 : 0 0001 : 1 ... 0111 : 7 (max value) 1000 : -8 (min value) ... 1110 : -2 1111 : -1 所以当你加1到0111(最大)时,它会变为1000,这是最小值.将此想法扩展到32位,它的工作方式相同. 至于为什么你的long也显示不正确的结果,这是因为它在int上执行加法然后隐式转换为long.你需要这样做: long l = (long) Integer.MAX_VALUE + 1 System.out.println(l); // now prints the correct value (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |