0
点赞
收藏
分享

微信扫一扫

Java:整形溢出导致Math.abs(-2147483648) 的返回值为-2147483648

一葉_code 2022-02-11 阅读 81


原因为:java的整形溢出。

在java中,整形的范围为

-232 ~ 232-1

因为0的存在,所以最大值需要减去1

观察Math.abs源码:

public static int abs(int a) {
return (a < 0) ? -a : a;
}

可以发现:根据a与0的关系,返回其本身或者其负数形式。而-2147483648本身是小于0的,因此需要返回-(-2147483648)也就是2147483648,也就是232。但是,整形的最大值只有232-1。在计算机的二进制模系统也就是补码中最大值再加一会变成最小值,如同时钟的模为12,最大值12再加一变成了1,是一个首尾相接的循环。

因此Math.abs(-2147483648) 的返回值为-2147483648。



举报

相关推荐

0 条评论