成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

為什么Math.abs(Integr.MIN_VALUE)==Integer.MIN_VALUE

Ocean / 3050人閱讀

摘要:上面代碼的結(jié)果是,這跟我們希望的結(jié)果相反,為什么絕對(duì)值函數(shù)沒有得到正確結(jié)果呢,我們來看下源碼在的源碼中,對(duì)于負(fù)數(shù)直接使用了加上負(fù)號(hào)來取法,但是我們知道,因?yàn)榇嬖?,的范圍是,所以最小的?shù)加上負(fù)號(hào)對(duì)應(yīng)的其實(shí)超過了對(duì)應(yīng)的最大整數(shù)范圍。

public class Test {        
    public static void main(String[] args) {
        int a=Integer.MIN_VALUE;
        System.out.println(Math.abs(a));
    }
}

上面代碼的結(jié)果是true,這跟我們希望的結(jié)果相反,為什么絕對(duì)值函數(shù)沒有得到正確結(jié)果呢,我們來看下源碼

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

在abs的源碼中,對(duì)于負(fù)數(shù)直接使用了加上負(fù)號(hào)來取法,但是我們知道,因?yàn)榇嬖?,int的范圍是[-2^31,2^31-1],

所以最小的數(shù)-2^31加上負(fù)號(hào)對(duì)應(yīng)的2^31其實(shí)超過了int對(duì)應(yīng)的最大整數(shù)范圍。我們?cè)賮韽淖止?jié)的角度分析一下,32位太長(zhǎng)了

這里我用1字節(jié)意思一下,數(shù)字在計(jì)算機(jī)內(nèi)用補(bǔ)碼表示

127: 0111 1111

-128: 1000 0000

按照加負(fù)號(hào)的取反過程,回顧一下組原的知識(shí),負(fù)數(shù)取反是先所有位取反(包括符號(hào)為),再+1

也就是0111 111再+1,于是有1000 0000,這樣原因和過程就一目了然了

擴(kuò)展:從上面的字節(jié)表示我們還可以看出Integer.MAX_VALUE+1=Integer.MIN_VALUE

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73220.html

相關(guān)文章

  • [LintCode] Divide Two Integers

    摘要:首先,分析溢出條件,設(shè)置符號(hào)位,然后取絕對(duì)值運(yùn)算。原理如下,被除數(shù),除數(shù),設(shè)等于。如,,,所以商里必定有一個(gè)的次方存入,然后。然后被除數(shù)減去,繼續(xù)。此時(shí),,循環(huán)結(jié)束。再舉一個(gè)例子看得懂的版本綜合一下 Problem Divide two integers without using multiplication, division and mod operator. If it is ...

    NervosNetwork 評(píng)論0 收藏0
  • [Leetcode] Divide Two Integers 整數(shù)整除

    摘要:位操作法復(fù)雜度時(shí)間空間思路我們?cè)O(shè)想,本來應(yīng)該的得到余,那么如果我們把忽略余數(shù)后分解一下,,也就是,也就是把商分解為,所以商的二進(jìn)制是。我們可以不斷的將乘的一次方,二次方,等等,直到找到最大那個(gè)次方,在這里是的四次方。 Divide Two Integers Divide two integers without using multiplication, division and m...

    張春雷 評(píng)論0 收藏0
  • [LeetCode] 29. Divide Two Integers

    Problem Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer divisi...

    fai1017 評(píng)論0 收藏0
  • leetcode 29 Divide Two Integers

    摘要:很容易想到,我們每次用被除數(shù)減去除數(shù),進(jìn)行減法的次數(shù)就是最終結(jié)果。這道題的采取了一種類似二分查找的思想。除了這些,這道題還要注意一些邊界情況的判斷,例如除數(shù)或被除數(shù)為,值溢出等。 題目詳情 Divide two integers without using multiplication, division and mod operator.If it is overflow, retu...

    馬龍駒 評(píng)論0 收藏0
  • [LintCode] Binary Representation

    摘要:細(xì)節(jié)上還要考慮正負(fù)號(hào)和整數(shù)位的越界情況。然后在循環(huán)內(nèi)判斷,如果有重復(fù)出現(xiàn)的,或者中小數(shù)部分的長(zhǎng)度超過,就說明該小數(shù)無法完全轉(zhuǎn)換。如果之前的正負(fù)號(hào)為,就在左邊加上負(fù)號(hào)。 Problem Given a (decimal - e.g. 3.72) number that is passed in as a string, return the binary representation t...

    you_De 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<