为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE
生活随笔
收集整理的這篇文章主要介紹了
为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public class Test { public static void main(String[] args) {int a=Integer.MIN_VALUE;System.out.println(Math.abs(a));}
}
上面代碼的結果是true,這跟我們希望的結果相反,為什么絕對值函數沒有得到正確結果呢,我們來看下源碼
public static int abs(int a) {return (a < 0) ? -a : a;}在abs的源碼中,對于負數直接使用了加上負號來取法,但是我們知道,因為存在0,int的范圍是[-2^31,2^31-1],
所以最小的數-2^31加上負號對應的2^31其實超過了int對應的最大整數范圍。我們再來從字節的角度分析一下,32位太長了
這里我用1字節意思一下,數字在計算機內用補碼表示
127: 0111 1111
-128: 1000 0000
按照加負號的取反過程,回顧一下組原的知識,負數取反是先所有位取反(包括符號為),再+1
也就是0111 111再+1,于是有1000 0000,這樣原因和過程就一目了然了
擴展:從上面的字節表示我們還可以看出Integer.MAX_VALUE+1=Integer.MIN_VALUE
總結
以上是生活随笔為你收集整理的为什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【leetcode】27.RemoveE
- 下一篇: 春运前五日全国累计发送旅客3.49亿人次