Math.abs(-2147483648)的返回值

不睡觉的怪叔叔 2017-04-02 06:20:35
Math.abs(-2147483648)的返回值为什么是-2147483648?在任何语言中,Math.abs(-2147483648)的返回值都是-2147483648吗?
...全文
319 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Math.abs(-2147483648L) 加个L表示long类型就可以了
lxyscls 2017-04-06
  • 打赏
  • 举报
回复
这样好了
Math.abs((long) Integer.MIN_VALUE)
方法定义,返回2147483648超过int表达范围了
public static int abs(int a)
moguobiao 2017-04-03
  • 打赏
  • 举报
回复
1楼讲的没错。这里我从二进制角度分析一下: 我们知道: 1=0000...001 2147483647=0111...111 -2147483648=1000...000 因此我们有: 2147483647+1 =0111...111+000...001=100...000=-2147483648 考虑 x=-2147483648 -x由下面定义: x+(-x)=0 1000...000+1000...000=0 所以有 -x=1000...000 因为x<0,我们有 abs(x)=-x=x
李德胜1995 2017-04-02
  • 打赏
  • 举报
回复
楼上说的很好。。。学习了
大隐藏于寺 2017-04-02
  • 打赏
  • 举报
回复
这个是因为在java里面int类型的取值范围是-2^31~(2^31 - 1),算出来就是-2147483648~2147483647,这是一个圆圈,我理解为一根-2147483648~2147483647取值范围的数轴,起点和终点相连,围成一个圈.当超过2147483647的时候,数据取值溢出,不能表示比2147483647大的正整数,此时继续在数轴上往后数数,下一个数就是-2147483648,2147483649比2147483647多2,往后数两个数,第二个就是-2147483647.可以按照这个规律去推算后面超过2147483647的取值.如果要细讲原理,就需要看原码,反码,补码的概念了,你可以自己搜一搜.在这里我就不赘述了. 当计算Math.abs(-2147483648)时,计算正常的话,结果应该是2147483648,按照上面说的,2147483648超过2147483647了,往下数一个数,就是-2147483648.你也可以去验证计算Math.abs(2147483647+2)值是2147483647,Math.abs(2147483647+3)的值是2147483646 你也可以看看另外一位同学碰到的类似问题http://bbs.csdn.net/topics/392146515

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧