<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java如何判斷整數(shù)溢出,溢出后怎么得到提示?

          共 1048字,需瀏覽 3分鐘

           ·

          2020-10-02 19:00


          作者:Aaron_濤

          blog.csdn.net/qq_33330687/article/details/81626157

          問(wèn)題

          在之前刷題的時(shí)候遇見(jiàn)一個(gè)問(wèn)題,需要解決int相加后怎么判斷是否溢出,如果溢出就返回Integer.MAX_VALUE

          解決方案

          JDK8已經(jīng)幫我們實(shí)現(xiàn)了Math下,不得不說(shuō)這個(gè)方法是在StackOverflow找到了的,確實(shí)比國(guó)內(nèi)一些論壇好多了

          加法

          public?static?int?addExact(int?x,?int?y)?{
          ????????int?r?=?x?+?y;
          ????????//?HD?2-12?Overflow?iff?both?arguments?have?the?opposite?sign?of?the?result
          ????????if?(((x?^?r)?&?(y?^?r))?0)?{
          ????????????throw?new?ArithmeticException("integer?overflow");
          ????????}
          ????????return?r;
          ????}

          減法

          ?public?static?int?subtractExact(int?x,?int?y)?{
          ????????int?r?=?x?-?y;
          ????????//?HD?2-12?Overflow?iff?the?arguments?have?different?signs?and
          ????????//?the?sign?of?the?result?is?different?than?the?sign?of?x
          ????????if?(((x?^?y)?&?(x?^?r))?0)?{
          ????????????throw?new?ArithmeticException("integer?overflow");
          ????????}
          ????????return?r;
          ????}

          乘法

          public?static?int?multiplyExact(int?x,?int?y)?{
          ????????long?r?=?(long)x?*?(long)y;
          ????????if?((int)r?!=?r)?{
          ????????????throw?new?ArithmeticException("integer?overflow");
          ????????}
          ????????return?(int)r;
          ????}

          注意 long和int是不一樣的

          ??public?static?long?multiplyExact(long?x,?long?y)?{
          ????????long?r?=?x?*?y;
          ????????long?ax?=?Math.abs(x);
          ????????long?ay?=?Math.abs(y);
          ????????if?(((ax?|?ay)?>>>?31?!=?0))?{
          ????????????//?Some?bits?greater?than?2^31?that?might?cause?overflow
          ????????????//?Check?the?result?using?the?divide?operator
          ????????????//?and?check?for?the?special?case?of?Long.MIN_VALUE?*?-1
          ???????????if?(((y?!=?0)?&&?(r?/?y?!=?x))?||
          ???????????????(x?==?Long.MIN_VALUE?&&?y?==?-1))?{
          ????????????????throw?new?ArithmeticException("long?overflow");
          ????????????}
          ????????}
          ????????return?r;
          ????}

          如何使用?

          直接調(diào)用是最方便的,但是為了追求速度,應(yīng)該修改一下,理解判斷思路,因?yàn)楫惓J鞘趾臅r(shí)的操作,無(wú)腦異常有可能超時(shí)

          寫(xiě)這個(gè)的目的

          總結(jié)一下,也方便告訴他人Java幫我們寫(xiě)好了函數(shù)。



          加微信回復(fù)"cloud?& vue"即可獲取

          SpringCloud+Vue(Mybatis)框架與搭建視頻播放站視頻教程







          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷网络 | 五月丁香夫妻自拍偷拍 | 欧美一级片在线 | 看尻屄| 97青娱乐在线观看视频网站 |