Math.abs(-2147483648)的返回值 Math.abs(-2147483648)的返回值为什么是-2147483648?在任何语言中,Math.abs(-2147483648)的返回值都是-2147483648吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个是因为在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 1楼讲的没错。这里我从二进制角度分析一下:我们知道:1=0000...0012147483647=0111...111-2147483648=1000...000因此我们有:2147483647+1 =0111...111+000...001=100...000=-2147483648考虑x=-2147483648-x由下面定义:x+(-x)=01000...000+1000...000=0所以有 -x=1000...000因为x<0,我们有abs(x)=-x=x 这样好了Math.abs((long) Integer.MIN_VALUE)方法定义,返回2147483648超过int表达范围了public static int abs(int a) Math.abs(-2147483648L)加个L表示long类型就可以了 创建文件夹问题!急死个人,这么简单的事情都被我搞砸了~~~ smslib 通过短信猫读取短信相关问题。请高手请教。。。。 想问下正则表达式的问题 紧急求问:我编的web应用无法在老板机器上运行。。。 关于别名以及查询的写法~ 关于java单机版 聊天工具,求助!!!!! 有关垃圾处理器的问题 大家帮我看看那里出问题了? 关于JTable.setValueAt()的问题 谁能推荐一个人气较旺的Java新闻组? socket, server在把client发来的数据原样发回client时丢了一个字节是怎么回事? 到底哪的问题,怎么就是不完全正确???哪位大神给看下
你也可以看看另外一位同学碰到的类似问题http://bbs.csdn.net/topics/392146515
我们知道:
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
Math.abs((long) Integer.MIN_VALUE)
方法定义,返回2147483648超过int表达范围了
public static int abs(int a)
加个L表示long类型就可以了