1. 程式人生 > 其它 >Java:整形溢位導致Math.abs(-2147483648) 的返回值為-2147483648

Java:整形溢位導致Math.abs(-2147483648) 的返回值為-2147483648

技術標籤:Java

原因為: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。