加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读