Math.abs(Integer.MIN_VALUE));

fillbill 2002-12-01 03:16:24
public class MathTest
{
public static void main(String[] args)
{
System.out.println(""+Math.abs(Integer.MIN_VALUE));
System.out.println(""+Math.abs(Long.MIN_VALUE));
}
}

为何结果为:
-2147483648
-9223372036854775808


...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
junnef 2002-12-01
  • 打赏
  • 举报
回复
楼上说的对,你可以先转换一下。
北极猩猩 2002-12-01
  • 打赏
  • 举报
回复
abs(Integer.MIN_VALUE)超出了整形的表示范围,
所以它的返回值和参数一样
Winuxava 2002-12-01
  • 打赏
  • 举报
回复
Integer.MIN_VALUE 是 -2147483648
也就是二进制的 1000....00(31个0)
一般对负数而言,绝对值就是再取负,所以取反加一,得到还是1000...00
Math.abs(int)返回的是一个int值。
但是2147483648已经不是Integer的范围所能表示的了。硬用int来表示,就
变成这样了。
可以这样——
System.out.println(""+Math.abs((long)Integer.MIN_VALUE));
System.out.println(""+Math.abs((double)Long.MIN_VALUE));


fillbill 2002-12-01
  • 打赏
  • 举报
回复
还是不明白,哪位能解释一下吗?
dentance 2002-12-01
  • 打赏
  • 举报
回复
16 进制换为 10 进制。
fillbill 2002-12-01
  • 打赏
  • 举报
回复
怎么不为2147483648
9223372036854775808

62,614

社区成员

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

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